2016-02-28 66 views
2

所以我在GDB运行的程序,并予设定的观察点一定变量(一个对象的指针,具体而言),它存在于地址0x6030b0:GDB观察点在未检测变化可变

(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

watch命令概念性手表以查看是否有表达变化。随着watch -location,命令代替手表,看是否有位置的变化(不同的是,如果一个变量超出范围,平原watch将更新其表达的想法,而-location不会 - 通常要-location)。

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

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

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

你可能想:

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