c++ - 我如何在 Linux 中显示堆栈跟踪?

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

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

最佳答案

原则上,信号处理程序只能调用一组(小的)函数,只有所谓的异步信号安全函数(不包括来自 GNU libc 的 backtrace ,正如 Maxim's answer 所建议的那样)。阅读signal(7) .

在实践中,尤其是如果您只想显示回溯然后中止,您可能并不关心。另请查看 Ian Taylor 的 libbacktrace它解析 DWARF 调试信息(因此您最好将带有 -g 标志的代码编译为 gccg++,也许还有优化标志像 -O2)。在 GCC 内部,它实际上用于从信号处理程序中转储不良信号(包括段错误,即 SIGSEGV)的良好回溯,并且在大多数情况下工作得很好。然后你应该使用最新版本的 GCC,例如海合会 6

关于c++ - 我如何在 Linux 中显示堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42281642/

相关文章:

c++ - '.' token c++ 之前的预期初始化器

java - 有没有办法在重定向到错误页面(在 Java 中)之前捕获错误的堆栈跟踪?

c# - 我如何告诉编译器忽略堆栈跟踪中的方法?

C++11 CMake : Regex fails

c++ - 未使用的类已删除

c++ - 如何修复用作初始值设定项错误的数组?

c++ - Writefile 导致崩溃,访问冲突

c++ - OpenCl 内核代码

c++ - QThread:线程仍在运行时被销毁,QMutex 被销毁

javascript - 如何限制我的node.js Swagger 服务器的堆栈跟踪?