GDB观察点在未检测变化可变
问题描述:
所以我在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
但是,指针的值显然确实发生了变化。什么可以解释这一点?
谢谢。
答
的watch
命令概念性手表以查看是否有表达变化。随着watch -location
,命令代替手表,看是否有位置的变化(不同的是,如果一个变量超出范围,平原watch
将更新其表达的想法,而-location
不会 - 通常要-location
)。
无论如何,考虑你的表达:
(gdb) wa (TNode<UCSDStudent> **)0x6030b0
这是一个常数。所以,它永远不会改变。
你可能想:
(gdb) watch -location *(TNode<UCSDStudent> **)0x6030b0