gpt4 book ai didi

c++ - gdb 观察点未检测到变量的变化

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:30 24 4
gpt4 key购买 nike

所以我在 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

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

谢谢。

最佳答案

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

无论如何,考虑一下你的表达方式:

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

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

你可能想要:

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com