如何在Linux中显示堆栈跟踪?

时间:2017-02-16 18:12:23

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

原则上,信号处理程序只能调用一组(小)函数,只能调用所谓的异步信号安全函数(从GNU libc中排除backtrace,如建议的那样由withZoneSameInstant())。阅读Maxim's answer

在实践中,特别是如果您只想显示回溯然后中止,您可能不在乎。另请参阅Ian Taylor的signal(7),它解析DWARF调试信息(因此您可以使用-g标记将代码编译为gccg++,这可能是优化标记的补充比如-O2)。在GCC内部,它实际上用于从信号处理程序转发不良信号(包括分段错误,即SIGSEGV)的良好回溯,并且在大多数情况下工作得很好。然后,您应该使用最新版本的GCC,例如GCC 6