【发布时间】:2011-12-18 04:32:05
【问题描述】:
我正在寻找一种简单的方法来以编程方式从 Linux 核心转储文件中提取堆栈跟踪,而无需调用 gdb。有人有想法吗?
为避免混淆:我不是在寻找一种从进程内部获取我自己的回溯的方法。我正在寻找一种从我拥有的完全独立的核心转储文件中获取回溯的方法。
【问题讨论】:
-
我认为你最好的方法是调用
gdb,在需要时可以很容易编写脚本的批处理模式。当您不指定拒绝使用它的原因时,忽略最明显的解决方案有点困难...... -
嗯,这里的目的是有一些可以部署在嵌入式环境中的东西,我们不能存储 coredump,也没有 gdb 的空间,但仍然想记录所有发生的崩溃的堆栈跟踪,尽可能好。
-
那么您可能需要考虑在程序崩溃之前打印回溯。您可以为
SIGSEGV和朋友安装一个信号处理程序,然后使用backtrace() 和相关调用打印出堆栈跟踪,然后根据需要继续退出/崩溃... -
好吧,它有很多程序,我们宁愿避免对它们都打补丁(特别是因为其中一些是二进制形式的)。所以我们想要生成所有生成的核心转储的堆栈跟踪的东西,不管它是哪个进程
-
除了
gdb之外,我不知道有任何工具可以做到这一点,但这并不意味着您找不到任何工具。挖掘 gdb 中将核心转储与可执行文件(和共享库)中的符号对齐并进行回溯的部分听起来并不有趣,但我想它可以完成......祝你好运!
标签: linux stack stack-trace core coredump