我在Solaris 10和Linux上使用g ++ 4.9.2。我正在使用信号处理程序。每当有信号时,我想显示堆栈跟踪。 如何在Linux中显示堆栈跟踪?
答案 0 :(得分:1)
有backtrace
个函数系列可以做到这一点。有关示例,请参见手册页。
答案 1 :(得分:1)
原则上,信号处理程序只能调用一组(小)函数,只能调用所谓的异步信号安全函数(从GNU libc中排除backtrace
,如建议的那样由withZoneSameInstant()
)。阅读Maxim's answer。
在实践中,特别是如果您只想显示回溯然后中止,您可能不在乎。另请参阅Ian Taylor的signal(7),它解析DWARF调试信息(因此您可以使用-g
标记将代码编译为gcc
或g++
,这可能是优化标记的补充比如-O2
)。在GCC内部,它实际上用于从信号处理程序转发不良信号(包括分段错误,即SIGSEGV
)的良好回溯,并且在大多数情况下工作得很好。然后,您应该使用最新版本的GCC,例如GCC 6