1

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

4

2 回答 2

2

原则上,信号处理程序只能调用一组(小)函数,只能调用所谓的异步信号安全函数(如Maxim 的回答backtrace所建议的,它不包括在 GNU libc 中)。读取信号(7)

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

于 2017-02-16T18:27:06.380 回答
1

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

于 2017-02-16T18:15:34.440 回答