在GDB中设置监视点

Man*_*ish 4 debugging gdb watchpoint

我正在操作一个庞大的代码库,并希望监视一个特定变量的值(它深埋在其中一个文件中),特别是当它被设置为零时.

1)变量不属于全局范围.有没有比首先将断点设置到定义它的函数更好的选项,然后设置观察点?
2)在1中尝试选项之后,我看到一段时间后它会被删除,并说它的帧外使用了它.这种方式会增加程序的繁琐程度,因为我必须一次又一次地添加它?任何变通方法?
3)有没有办法检查,即观察特定变量是否等于0(或任何特定常数)?

Emp*_*ian 9

想要监视特定变量的值

通常这不是最好的方法,特别是在大型代码库中.

您真正想要做的是理解不变量,并声明它们在进入和退出代码的各个部分时都是正确的.

1)变量不属于全局范围.有没有比首先将断点设置到定义它的函数更好的选项,然后设置观察点?

对于自动(堆栈)变量,您必须位于变量为"活动"的范围内.

可以做的是在某条线上设置断点,并将命令附加到将自动设置观察点的断点,例如

(gdb) break foo.c:123
(gdb) commands 1
      silent
      watch some_local
      continue
      end
Run Code Online (Sandbox Code Playgroud)

3)有没有办法检查,即观察特定变量是否等于0

你不能用观察点做到这一点,但你可以使用条件断点:

(gdb) break foo.c:234 if some_local == 0
Run Code Online (Sandbox Code Playgroud)