问题描述
使用gdb调试时,有时显示的运行位置很奇怪。当我使用n
执行下一行时,我要关注的指令已经执行。下面是一个例子。显示执行位置的光标当前未放置在任何命令上
当我使用n命令时,结果如下图所示。
您会看到光标没有停留在911行上。有时会跳过几行。
并且光标经常停留在注释上。
解决方法
使用gdb调试时,有时显示的运行位置很奇怪。
通常由于一种或两种原因而发生:
- 您的源代码相对于您要调试的二进制文件已经过时(即,您已经编辑了源代码,但是没有重建二进制文件以匹配新的源代码),或者
- 您的二进制文件是在优化的基础上构建的(请参见this answer)。
在GDB tui模式下使用n
时,源代码窗口可能会损坏。当程序将某些内容打印到stdout时,可能会发生这种情况,从而破坏了tui窗口的布局。看来这就是DPRINTF()
呼叫中911行中发生的情况。要修复布局,可以按 Ctrl + L ,然后会刷新tui窗口。