帮助gdb调试崩溃日志记录

时间:2010-12-01 04:24:38

标签: debugging logging crash gdb

我一直在使用GDB(C代码)进行调试。问题是如果我运行我的应用程序,如果它崩溃,控件将返回main()(应用程序重新启动)。因此不知道它在哪里坠毁。所以我花了很多时间来完成每个功能。

我想知道是否有可以启用日志,这将在崩溃之前生成最后一行执行。这只是我的假设,如果还有其他更简单的方法请告诉我,这将为我节省大量时间!

此外,如果gdb生成一个日志,路径在哪里?

提前致谢。

2 个答案:

答案 0 :(得分:3)

这个问题对我来说有点不清楚,但我会采取刺:

如果崩溃过程中GDB附加了崩溃进程,崩溃应该会停止程序并让您回到(gdb)提示符。如果您再键入bt,则应该看到堆栈。

如果您没有连接GDB,那么this answer to a related question可能会有所帮助。 (简而言之,您可能希望系统在程序崩溃时创建核心转储。核心转储只是一个包含有关崩溃进程的大量信息的文件。您可以将GDB与核心转储一起使用来查看堆栈。 )

如果您不知道,会发布您在屏幕上看到的内容,我们会猜测。

在任何情况下,程序绝对不应该在main()重新开始。似乎值得追踪为什么会发生这种情况以及究竟发生了什么。控件是否真的在同一进程中跳转到main ,而不是另一个进程以某种方式自动启动?

答案 1 :(得分:0)

以gdb模式运行程序。

 $ gdb ./myProgram


将断点设置为预期位置。

 $ break functionName


或者将断点设置为特定的行号。

 $ break 15


开始执行

 $ r

通过'进入或退出执行。或者' n'

 $ s


一旦程序崩溃,请' 进行回溯。

 $ bt

你可以通过' up'来追寻你的踪迹。 &安培; ' down' 命令

 $ up


也可以采取其他方式。使用“core”作为核心转储文件的调试程序。

 $ gdb executableFilename core
 $ bt