如何知道Linux程序崩溃的地址?

时间:2012-01-04 18:38:15

标签: c++ linux gdb centos

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

4 个答案:

答案 0 :(得分:5)

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

程序崩溃后,如果您的程序是多线程的,您将找到一个名为core的核心转储文件,或者core.<pid>

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

答案 1 :(得分:4)

首先执行ulimit -c unlimited,因此程序将保留核心转储。 然后,当它崩溃时,用核心转储调用gdb来读取 崩溃时的程序状态。

答案 2 :(得分:3)

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

答案 3 :(得分:2)

- &GT;编译启用了gdb标志的代码。

gcc -o&lt;二进制名称&gt; -g&lt; file.c&gt; (假设它是一个c / c ++程序)

- &GT;使用gdb运行可执行文件。 gdb&lt;二进制名称&gt;

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

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