在没有在调试器中运行应用程序的情况下获取崩溃的堆栈跟踪

时间:2017-06-05 14:26:39

标签: c++ linux debugging crash stack-trace

我通常使用GDB(在Linux中,使用Qt Creator调试器GUI)进行调试。但是现在我遇到了一个崩溃,它在调试器下运行时拒绝发生,但在外面运行时很容易发生。

在这种情况下,如何获得崩溃的堆栈跟踪?

特定于Linux的解决方案是可以的。

注意:我正在谈论仅运行调试版本,即使它在调试器外运行。

1 个答案:

答案 0 :(得分:3)

确保您可以在崩溃后获得堆栈跟踪的最简单方法是运行

ulimit -c unlimited

在启动程序之前在shell中。 这将确保允许内核生成"核心转储"当程序崩溃时,无限大小(对于许多发行版,默认大小为0)。

然后可以将该核心文件作为gdb programfile corefile加载到gdb中,然后命令thread apply all bt将为该特定崩溃的所有线程提供堆栈跟踪(仅使用bt关心崩溃的线程。)

您还可以使用pstack程序从正在运行的程序中获取堆栈跟踪。