我有一个应用程序,我正在调试,我试图了解gdb如何工作以及为什么我有时无法单步执行应用程序.我遇到的问题是,当我逐步执行程序时,gdb将挂起并且它所附加的进程将进入一个已不存在的状态.gdb挂起后,我必须杀死它以释放终端(ctrl-C不起作用,我必须通过获取该gdb会话的进程ID并使用kill -9从不同的终端窗口执行此操作).
我猜测gdb正在挂起,因为它正在等待应用程序在下一条指令处停止,并且某种程度上应用程序完成执行而没有gdb识别这一点.但这只是我迄今为止所观察到的行为的猜测.所以我的问题是,如果有人之前已经看过这种行为和/或可能会提出原因可能是什么.我认为这可能有助于我改进调试策略.
如果它很重要我正在使用g ++ 4.4.3,gdb 7.1,在Ubuntu 10.04 x86_64上运行.
如果是挂起的原因,我会说调试的进程不会闲置。每次 GDB 完成一个步骤时,它都必须更新您需要打印的任何表达式。它可能包括以下指针等,在某些情况下,它可能会在那里失败(尽管我没有提醒真正的“挂起”)。它通常还会尝试更新您的堆栈跟踪。如果堆栈跟踪已损坏并且不再连贯,则可能会陷入无限循环。附加 gdb 以strace查看挂起期间正在发生的活动类型可能是进一步找出问题的好方法。
(例如,通过不再工作的 NFS/SSHFS 挂载访问源代码是 gdb 挂起的最常见原因之一,此处:P)
| 归档时间: |
|
| 查看次数: |
14946 次 |
| 最近记录: |