使用gdb进行调试时,有时gdb显示的运行位置很奇怪?

问题描述

使用gdb调试时,有时显示的运行位置很奇怪。当我使用n执行下一行时,我要关注的指令已经执行。下面是一个例子。显示执行位置的光标当前未放置在任何命令上

enter image description here

当我使用n命令时,结果如下图所示。

enter image description here

您会看到光标没有停留在911行上。有时会跳过几行。

并且光标经常停留在注释上。

enter image description here

解决方法

使用gdb调试时,有时显示的运行位置很奇怪。

通常由于一种或两种原因而发生:

  • 您的源代码相对于您要调试的二进制文件已经过时(即,您已经编辑了源代码,但是没有重建二进制文件以匹配新的源代码),或者
  • 您的二进制文件是在优化的基础上构建的(请参见this answer)。
,

在GDB tui模式下使用n时,源代码窗口可能会损坏。当程序将某些内容打印到stdout时,可能会发生这种情况,从而破坏了tui窗口的布局。看来这就是DPRINTF()呼叫中911行中发生的情况。要修复布局,可以按 Ctrl + L ,然后会刷新tui窗口。