【发布时间】:2010-12-01 04:24:37
【问题描述】:
我一直在 GDB 中调试(C 代码)。问题是,如果我运行我的应用程序并且它崩溃了,那么控件就会返回到 main()(应用程序重新启动)。因此将不知道它在哪里坠毁。所以我花了很多时间单步执行每个函数。
我想知道是否有一个日志可以启用,它将在崩溃前生成最后一行执行。这只是我的假设,如果有其他更简单的方法请告诉我,这将为我节省大量时间!
另外,如果 gdb 生成日志,路径会在哪里?
提前致谢。
【问题讨论】:
-
你能定义“崩溃”吗?如果有未处理的信号(例如 SIGSEGV),GDB 应该拦截它并立即停在那里,但听起来这不是正在发生的事情,所以你必须以不同的方式“崩溃”
-
如果可以,GDB 可以处理预设命令。或者,如果日志是指堆栈跟踪,请查看tlug.up.ac.za/wiki/index.php/…。它展示了如何在 SIGSEGV 上生成堆栈跟踪。如果您知道导致崩溃的信号,请在收到该信号而不是 SIGSEGV 时生成堆栈跟踪。
-
控制返回到 main() 和应用程序重新启动并不是一回事 - 它是真正在 main() 的第 1 行重新启动,还是在某些函数调用后才回到该行出现错误并返回?
-
@vpit3833: 不错的链接:)
-
@Jefromi:不,执行后它不会返回相同的功能。它再次启动所有初始化过程,这意味着应用程序已重新启动。
标签: debugging logging crash gdb