這裡大概說下gdb除錯程式時,watch的使用。至於原理尚不清楚,以後再做補充,還請見諒。
watch通常需要和break,run,continue聯合使用。
下面舉例說明:
**如下:
#include int main()
除錯的時候過程如下:
(gdb) l
1 #include
2
3 int main()
4
(gdb) b 5 -------在第5行設定斷電
breakpoint 1 at 0x80483ba: file a.cpp, line 5.
(gdb) r -------執行到斷點處停止
starting program: /a.o
breakpoint 1, main () at a.cpp:5
5 int a=0;
(gdb) watch a -------觀察a的值,當有變化時,停止
hardware watchpoint 2: a
(gdb) c -------繼續執行,當a的值變化時停止
continuing.
hardware watchpoint 2: a
old value = 0
new value = 1
main () at a.cpp:6
6 for(int i=0; i<10; i++)
(gdb)
continuing.
hardware watchpoint 2: a
old value = 1
new value = 3
main () at a.cpp:6
6 for(int i=0; i<10; i++)
(gdb)
continuing.
hardware watchpoint 2: a
即,在使用watch時步驟如下:
1. 使用break在要觀察的變數所在處設定斷電;
2. 使用run執行,直到斷點;
3. 使用watch設定觀察點;
4. 使用continue觀察設定的觀察點是否有變化。
疑問:1. 直接設定觀察點是不行的,原因未知。
2. 測試對於指標設定觀察點,觀察的為指標的值,還是指標所在的空間。
gdb 斷點設定(二)watch
2 watch watch l location expr thread threadnum mask maskvalue l 與 mask沒有仔細研究,thread threadnum 是在多執行緒的程式中限定只有被執行緒號是threadnum的執行緒修改值後進入斷點。經常用到的如下命令 watc...
GDB除錯之watch變數跟蹤
開發中經常遇到某個變數明明已經賦值了,但是最後得到的結果卻並非賦予的值。解決這樣問題讓人很頭疼,原因我們可能都知道,可能是記憶體越界導致這部分值被覆蓋掉了,但是什麼時候被覆蓋掉的呢?總不能在每個懷疑的地方列印這個值吧?這樣效率很低,而且定位不一定準確。這個時候使用gdb除錯中的watch就可以輕鬆搞...
liunx下gdb的使用
一般來說,gdb主要幫忙你完成下面四個方面的功能 1 啟動你的程式,可以按照你的自定義的要求隨心所欲的執行程式。2 可讓被除錯的程式在你所指定的調置的斷點處停住。斷點可以是條件表示式 3 當程式被停住時,可以檢查此時你的程式中所發生的事。4 動態的改變你程式的執行環境。乙個除錯示例 源程式 tst....