我一直在使用GDB(C代码)进行调试。问题是如果我运行我的应用程序,如果它崩溃,控件将返回main()(应用程序重新启动)。因此不知道它在哪里坠毁。所以我花了很多时间来完成每个功能。
我想知道是否有可以启用日志,这将在崩溃之前生成最后一行执行。这只是我的假设,如果还有其他更简单的方法请告诉我,这将为我节省大量时间!
此外,如果gdb生成一个日志,路径在哪里?
提前致谢。
答案 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