2012-01-04 49 views
1

我有一个在Linux中运行的程序,它一直在神秘地崩溃。我已经知道了一种方法来知道它在哪里崩溃是使用GDB。但我不想每次重新启动时都附加到它上面(因为我正在测试它,所以要做很多)。有没有其他方法可以做到这一点?如何知道Linux中程序崩溃的地址?

回答

5

首先使用ulimit -c unlimited允许崩溃的程序写入核心转储。

程序崩溃后,如果程序是多线程的,您会发现核心转储文件corecore.<pid>

您可以将其加载到GDB中以检查崩溃时的状态,其中gdb program core

3

您可以配置您的操作系统以在程序崩溃时转储核心文件。然后,您可以检查核心以确定崩溃位置。

4

首先做一个ulimit -c unlimited,所以程序会留下核心转储。 然后,当它崩溃时,调用gdb以及核心转储,以便在崩溃时读取程序的 状态。

+0

是的。我的一个错字。我会解决它。 – 2012-01-05 08:11:44

2

- >编译启用了gdb标志的代码。

的gcc -o <二进制名称> -g < file.c>(假设它是一个C/C++程序)

- >运行可执行withing GDB。 gdb <二进制名称>

此后有办法找到崩溃位置: 1.逐步执行。 2.运行代码,它崩溃(按预期),在gdb中输入“where”(不带引号)它会给出回溯。从那里,你可以找到地址。

这是gdb的快速指南:http://www.cs.cmu.edu/~gilpin/tutorial/