因此,我在GDB中运行一个程序,并为某个变量(具体来说是对象指针)设置了一个监视点,该变量存在于地址0x6030b0处:

(gdb) wa (TNode<UCSDStudent> **)0x6030b0
Watchpoint 7: (TNode<UCSDStudent> **)0x6030b0

我知道指针的值(value):
(gdb) p/x *((TNode<UCSDStudent> **)0x6030b0)
$5 = 0x603130

我在程序的第115行设置了一个断点。然后,我继续这个断点:
(gdb) c
Continuing.

No more reverse-execution history.
main (argc=2, argv=0x7fffffffd9a8) at Driver.c:115
115     ST.Write( cout << "\nFinal Symbol Table:\n" );

这意味着指针的值没有改变,因为gdb不会在任何观察点停止。现在,我输出指针的值:
(gdb) p/x *((TNode`<UCSDStudent>` **)0x6030b0)
$6 = 0x0

但是,指针的值显然发生了变化。有什么可以解释的?

谢谢。

最佳答案

watch命令在概念上会监视表达式是否发生变化。使用watch -location,该命令改为监视位置是否发生变化(不同之处在于,如果变量超出范围,纯watch将更新其表达式概念,而-location则不会(通常需要-location)。

无论如何,请考虑您的表情:

(gdb) wa (TNode<UCSDStudent> **)0x6030b0

这是一个常数。因此,它永远不会改变。

您可能想要:
(gdb) watch -location *(TNode<UCSDStudent> **)0x6030b0

关于c++ - gdb Watchpoint未检测到变量的变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35682896/

10-13 08:07
查看更多