gdb除錯基本方法-----斷點
阿新 • • 發佈:2018-12-02
編譯程式
在進行程式編譯時新增 -g 選項
例:
gcc -g -Wall -o test -test.c
斷點
-
list 檢視程式碼
list可簡寫為 l
使用方法:- list [檔名]:[行號]
- list [函式名]
命令執行後,會顯示行號附近的程式碼
-
break 設定斷點
break可簡寫為 b
使用方法:- break [檔名] :[行號]
- break [行號]
- break if 條件
比如有時我們在迴圈處需要迴圈多少次後停下就用第三條命令,
break if i==4這條命令執行後,當迴圈到第5次,滿足條件i == 4時程式停住。for(i = 0;i < 10; ++i) { a++; }
在設定斷點後可通過continue命令繼續執行程式,程式會在所設斷點處停住,contiune可簡寫為 c。
這裡需要注意的是在使用第2種方法時, 會將斷點設定在目前所在的檔案裡,例如現在有1.c和2.c兩個檔案,上一條命令是操作2.c檔案,那麼本次的斷點會預設設定在2.c檔案裡。
-
info 檢視斷點
使用方法:- info b 或者 info break
執行命令後會顯示所有的斷點號和各個斷點所在的行號
- info b 或者 info break
-
delete 刪除斷點
使用方法:- delete [斷點號]
斷點號可以是單個斷點號,也可以是序列。例如 delete 1-10,這將刪除序號在區間1~10內的所有斷點。
- delete [斷點號]
-
next 和 step
這兩條命令用來單步除錯程式,- next :程式向後執行一步,若為子函式則不進入子函式內部;
- step :程式向後執行一步,若目前程式指標指向子函式則進入子函式;
-
print
當程式執行起來後遇到故障或者斷點停住,或者單步除錯時,可通過print命令來檢視變數的值。int fun(void) { int i, a = 1, b = 2, c = 3; int array[10] = {0}; a++; b++; c++; for(i = 0;i < 10; ++i) { array[i] = i; } return 0; }
使用方法:
print b可以檢視變數b的值。**print array[3]**便可以檢視陣列第四個元素的值。
在斷點這一部分中還有很多其他命令,比如設定觀察點等等,我目前也在學習。平常除錯這些基本夠用了。