提问人:Dr. Debasish Jana 提问时间:2/17/2017 最后编辑:StriezelDr. Debasish Jana 更新时间:2/18/2017 访问量:3202
如何在 Linux 中显示堆栈跟踪?
how do I show stack trace in Linux?
问:
我在 Solaris 10 和 Linux 上使用 g++ 4.9.2。我正在使用信号处理程序。每当有信号时,我都想显示堆栈跟踪。 如何在 Linux 中显示堆栈跟踪?
答:
1赞
Maxim Egorushkin
2/17/2017
#1
有回溯
系列函数可以做到这一点。有关示例,请参见手册页。
2赞
Basile Starynkevitch
2/17/2017
#2
原则上,信号处理程序只能调用(一小组)函数,只能调用所谓的异步信号安全函数(正如 Maxim 的回答所建议的那样,它不包括在 GNU libc 之外)。读取信号(7)。backtrace
在实践中,特别是如果您只想显示回溯,然后中止,您可能不在乎。还可以查看 Ian Taylor 的 libbacktrace,它解析 DWARF 调试信息(因此您最好使用 flag to 或 编译代码,也许还可以添加优化标志,例如 )。在 GCC 内部,它实际上用于从其信号处理程序中转储对不良信号(包括分段错误,即)进行很好的回溯,并且大多数时候效果很好。然后,您应该使用最新版本的 GCC,例如 GCC 6-g
gcc
g++
-O2
SIGSEGV
评论
0赞
Dr. Debasish Jana
2/17/2017
我想以编程方式打印堆栈跟踪,而不是在 gdb 中
0赞
Basile Starynkevitch
2/18/2017
但是我在程序化中建议的解决方案(不涉及)。但是,您最好使用gdb
-g
评论