2016-02-28 73 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