想要持续观察并偶尔检查 gdb 中当前帧外的变量

wal*_*ala 3 gdb watchpoint

假设我定义了一个var在主函数中命名的变量。我为它设置了一个观察点。然后我输入另一个名为func(). 此时,观察点可能会被删除,因此我无法访问该变量。有什么方法可以让您随时随地保持观察点?

另外,我知道我可以使用类似的语法print main::var来打印出变量的值。但这还不够。有什么好主意吗?

Tom*_*mey 7

gdb 的一个奇怪之处在于它watch试图尊重表达式的所有组成部分的范围。因此,如果您watch var, 并且var超出范围,则观察点将被删除。这也适用于更复杂表达式的元素,例如watch a + b.

这当然是有道理的,而且在某种程度上很酷——但它很少是你真正想要的。根据我的经验,不关心范围而只想观看一些内存是更正常的。

为此,请传递-locationwatch命令。这将执行您更常用的操作——只需要表达式引用的内存。所以,watch -location var