gdb下watch的使用

2021-05-27 21:16:07 字數 1308 閱讀 3329

這裡大概說下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....