我有一个应用程序,我正在调试,我想了解gdb是如何工作的,以及为什么我无法有时通过应用程序。我遇到的问题是,gdb将挂起,并且它将连接到的进程将在我逐步执行该程序时进入停用状态。 gdb挂起后我必须杀死它才能释放终端(ctrl-C不起作用,我必须通过获取该gdb会话的进程ID并使用kill -9来从不同的终端窗口执行此操作)。gdb为什么会挂起?
我猜测gdb挂起,因为它正在等待应用程序停止在下一个指令,并以某种方式应用程序完成执行没有gdb标识这一点。但这只是我迄今为止观察到的行为的猜测。所以我的问题是,如果有人曾经看到过这种行为,并且/或者可能会提出原因可能是什么。我认为这可以帮助我改进我的调试策略。
万一它很重要我使用g ++ 4.4.3,gdb 7.1,在Ubuntu 10.04 x86_64上运行。
有一些最小的测试用例可以给你吗?我的意思是,正如所写,很难回答为什么它可能会发生 - 除了“可能是因为gdb有bug”。 – derobert
感谢您的建议。现在应用程序有很多库代码,但是我会看看是否可以创建一个我可以作为示例发布的小测试用例。 –
我建议使用更新的'gdb'。目前的版本是** 7.3 **,他们取得了很大的进步。 (和BTW,使用更新的'g ++'即4.6.2也会有所帮助;因为GCC也在调试信息方面取得进展)。 –