gdb Watchpoint未检测到变量的变化

时间:2016-02-28 13:05:44

标签: c++ debugging gdb

所以我在GDB中运行一个程序,并为某个变量设置一个观察点(一个特定的对象指针),它存在于地址0x6030b0:

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

我知道指针的价值:

(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

然而,指针的值明显改变了。什么可以解释这个?

感谢。

1 个答案:

答案 0 :(得分:1)

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

无论如何,请考虑你的表达:

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

这是一个常数。所以,它永远不会改变。

你可能想要:

(gdb) watch -location *(TNode<UCSDStudent> **)0x6030b0