【问题标题】:how to generate a stack trace from a core dump file in C, without invoking an external tool such as gdb如何从 C 中的核心转储文件生成堆栈跟踪,而不调用外部工具,例如 gdb
【发布时间】:2011-12-18 04:32:05
【问题描述】:

我正在寻找一种简单的方法来以编程方式从 Linux 核心转储文件中提取堆栈跟踪,而无需调用 gdb。有人有想法吗?

为避免混淆:我不是在寻找一种从进程内部获取我自己的回溯的方法。我正在寻找一种从我拥有的完全独立的核心转储文件中获取回溯的方法。

【问题讨论】:

  • 我认为你最好的方法是调用gdb,在需要时可以很容易编写脚本的批处理模式。当您不指定拒绝使用它的原因时,忽略最明显的解决方案有点困难......
  • 嗯,这里的目的是有一些可以部署在嵌入式环境中的东西,我们不能存储 coredump,也没有 gdb 的空间,但仍然想记录所有发生的崩溃的堆栈跟踪,尽可能好。
  • 那么您可能需要考虑在程序崩溃之前打印回溯。您可以为SIGSEGV 和朋友安装一个信号处理程序,然后使用backtrace() 和相关调用打印出堆栈跟踪,然后根据需要继续退出/崩溃...
  • 好吧,它有很多程序,我们宁愿避免对它们都打补丁(特别是因为其中一些是二进制形式的)。所以我们想要生成所有生成的核心转储的堆栈跟踪的东西,不管它是哪个进程
  • 除了gdb 之外,我不知道有任何工具可以做到这一点,但这并不意味着您找不到任何工具。挖掘 gdb 中将核心转储与可执行文件(和共享库)中的符号对齐并进行回溯的部分听起来并不有趣,但我想它可以完成......祝你好运!

标签: linux stack stack-trace core coredump


【解决方案1】:

如果您确实无法调用 gdb,但想要像它提供的那样进行回溯,您可以将所需的 gdb 源代码复制到您的项目中。显然,只调用 gdb 会更容易、更易于维护,而且不会让人大吃一惊,所以也许你应该这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-21
    • 2014-01-30
    • 1970-01-01
    • 2017-12-31
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多