因此,我在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/