我通常使用GDB(在Linux中,使用Qt Creator调试器GUI)进行调试。但是现在我遇到了一个崩溃,它在调试器下运行时拒绝发生,但在外面运行时很容易发生。
在这种情况下,如何获得崩溃的堆栈跟踪?
特定于Linux的解决方案是可以的。
注意:我正在谈论仅运行调试版本,即使它在调试器外运行。
答案 0 :(得分:3)
确保您可以在崩溃后获得堆栈跟踪的最简单方法是运行
ulimit -c unlimited
在启动程序之前在shell中。 这将确保允许内核生成"核心转储"当程序崩溃时,无限大小(对于许多发行版,默认大小为0)。
然后可以将该核心文件作为gdb programfile corefile
加载到gdb中,然后命令thread apply all bt
将为该特定崩溃的所有线程提供堆栈跟踪(仅使用bt
关心崩溃的线程。)
您还可以使用pstack
程序从正在运行的程序中获取堆栈跟踪。