我在 Solaris 10 和 Linux 上使用 g++ 4.9.2。我正在使用信号处理程序。每当有信号时,我想显示堆栈跟踪。 我如何在 Linux 中显示堆栈跟踪?
最佳答案
原则上,信号处理程序只能调用一组(小的)函数,只有所谓的异步信号安全函数(不包括来自 GNU libc 的 backtrace
,正如 Maxim's answer 所建议的那样)。阅读signal(7) .
在实践中,尤其是如果您只想显示回溯然后中止,您可能并不关心。另请查看 Ian Taylor 的 libbacktrace它解析 DWARF 调试信息(因此您最好将带有 -g
标志的代码编译为 gcc
或 g++
,也许还有优化标志像 -O2
)。在 GCC 内部,它实际上用于从信号处理程序中转储不良信号(包括段错误,即 SIGSEGV
)的良好回溯,并且在大多数情况下工作得很好。然后你应该使用最新版本的 GCC,例如海合会 6
关于c++ - 我如何在 Linux 中显示堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42281642/