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