【发布时间】:2017-07-06 00:26:22
【问题描述】:
我在 Solaris 10 和 Linux 上使用 g++ 4.9.2。我正在使用信号处理程序。每当有信号时,我想显示堆栈跟踪。 如何在 Linux 中显示堆栈跟踪?
【问题讨论】:
-
Solaris 还是 Linux?
标签: c++ stack-trace g++4.9
我在 Solaris 10 和 Linux 上使用 g++ 4.9.2。我正在使用信号处理程序。每当有信号时,我想显示堆栈跟踪。 如何在 Linux 中显示堆栈跟踪?
【问题讨论】:
标签: c++ stack-trace g++4.9
原则上,信号处理程序只能调用一组(小)函数,只有所谓的 异步信号安全函数(不包括 GNU libc 中的 backtrace,正如 @ 所建议的那样987654321@)。阅读signal(7)。
在实践中,特别是如果您只想显示回溯然后中止,您可能不在乎。还要查看 Ian Taylor 的 libbacktrace,它解析 DWARF 调试信息(因此您最好将带有 -g 标志的代码编译为 gcc 或 g++,也许除了像 -O2 这样的优化标志之外)。在 GCC 内部,它实际上用于从信号处理程序中转储坏信号(包括分段错误,即SIGSEGV)的良好回溯,并且在大多数情况下运行良好。然后,您应该使用最新版本的 GCC,例如海合会 6
【讨论】:
gdb 不涉及)。但是,您最好使用-g 进行编译
有backtrace 系列函数可以做到这一点。有关示例,请参见手册页。
【讨论】: