【问题标题】:how do I show stack trace in Linux?如何在 Linux 中显示堆栈跟踪?
【发布时间】:2017-07-06 00:26:22
【问题描述】:

我在 Solaris 10 和 Linux 上使用 g++ 4.9.2。我正在使用信号处理程序。每当有信号时,我想显示堆栈跟踪。 如何在 Linux 中显示堆栈跟踪?

【问题讨论】:

  • Solaris 还是 Linux?

标签: c++ stack-trace g++4.9


【解决方案1】:

原则上,信号处理程序只能调用一组(小)函数,只有所谓的 异步信号安全函数(不包括 GNU libc 中的 backtrace,正如 @ 所建议的那样987654321@)。阅读signal(7)

在实践中,特别是如果您只想显示回溯然后中止,您可能不在乎。还要查看 Ian Taylor 的 libbacktrace,它解析 DWARF 调试信息(因此您最好将带有 -g 标志的代码编译为 gccg++,也许除了像 -O2 这样的优化标志之外)。在 GCC 内部,它实际上用于从信号处理程序中转储坏信号(包括分段错误,即SIGSEGV)的良好回溯,并且在大多数情况下运行良好。然后,您应该使用最新版本的 GCC,例如海合会 6

【讨论】:

  • 我想以编程方式打印堆栈跟踪,而不是在 gdb 中
  • 但是我在程序中建议的解决方案(gdb 不涉及)。但是,您最好使用-g 进行编译
【解决方案2】:

backtrace 系列函数可以做到这一点。有关示例,请参见手册页。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多