【发布时间】:2012-02-02 15:53:26
【问题描述】:
我有一个在 Linux 中运行的程序,它一直在神秘地崩溃。我已经知道知道它在哪里崩溃的一种方法是使用 GDB。但是我不想每次重新启动它时都附加它(因为我正在测试它,所以经常这样做)。有没有其他方法可以做到这一点?
【问题讨论】:
我有一个在 Linux 中运行的程序,它一直在神秘地崩溃。我已经知道知道它在哪里崩溃的一种方法是使用 GDB。但是我不想每次重新启动它时都附加它(因为我正在测试它,所以经常这样做)。有没有其他方法可以做到这一点?
【问题讨论】:
首先做一个ulimit -c unlimited,所以程序会留下一个核心转储。
然后,当它崩溃时,使用核心转储调用gdb,以读取
崩溃时程序的状态。
【讨论】:
-> 在启用 gdb 标志的情况下编译代码。
gcc -o -g
-> 使用 gdb 运行可执行文件。 gdb
在此之后,有一些方法可以找到崩溃位置: 1. 逐步执行。 2.运行代码,它崩溃(如预期),在gdb中输入“where”(不带引号)它给出了回溯。从那里,你可以找到地址。
这是一个不错的 gdb 快速指南:http://www.cs.cmu.edu/~gilpin/tutorial/
【讨论】:
首先使用ulimit -c unlimited 允许崩溃的程序写入核心转储。
程序崩溃后,您会找到一个名为 core 的核心转储文件,如果您的程序是多线程的,则可能是 core.<pid>。
您可以使用gdb program core 将其加载到 GDB 以检查崩溃时的状态。
【讨论】:
您可以将操作系统配置为在程序崩溃时转储核心文件。然后,您可以检查内核以确定崩溃位置。
【讨论】: