2010-12-01 553 views
1

我一直在调试GDB(C代码)。问题是如果我运行我的应用程序,如果它崩溃,控制回到main()(应用程序重新启动)。因此不知道它在哪里崩溃。所以我花了很多时间来完成每个功能。帮助gdb调试崩溃日志记录

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

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

在此先感谢。

+2

你能定义“崩溃”吗?如果有一个未处理的信号(例如SIGSEGV),GDB应该拦截它并立即停止,但是这听起来并非如此,因此您必须以不同的方式“崩溃”。 – 2010-12-01 04:26:45

回答

3

这个问题是一个小我不清楚,但我会采取刺伤:

如果您GDB连接到崩溃时的崩溃进程,崩溃,应停止该程序,并把你回来在(gdb)提示。如果你输入bt,你应该看到堆栈。

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

如果你不知道,发布你在屏幕上看到这种情况时,我们会猜测。

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

0

在gdb模式下运行你的程序。

$ gdb ./myProgram 


将断点设置为预期位置。

$ break functionName 


或设置中断点为特定行号。

$ break 15 


启动执行

$ r 


步骤进入或通过的'走出执行或 'n' 个

$ s 


一旦程序崩溃,做'bt'用于回溯。

$ bt 


您可以通过'上' & '向下'命令

$ up 


上去,在您的跟踪下来也可以采取另一种方法。以“核心”作为核心转储文件的调试程序。

$ gdb executableFilename core 
$ bt