關於gdb
1,編譯的時候,要加上-g : gcc debugme.c -o debugme -g
2,使用gdb來啟動待除錯**:
gdb ./debugme
3,列出待除錯**:
ll 10
l 1,30
4,設定斷點:
b 10 (在程式的第10行,設定乙個斷點)
b 20 if i>= 5 (在程式的第20行,設定乙個斷點,並且只有當i>=5時才停下來)
info b (檢視所設定的斷點的資訊)
delete n (刪除第n號斷點)
disable n (禁用第n號斷點)
enable n (啟用第n號斷點)
5,啟動待除錯**:
runr
r abcd 1234
print i
p idisplay i
backtrace full (檢視當前程序的棧的資訊)
bt full
whatis i (檢視變數i的型別)
7,單步除錯
next (單步執行:將函式呼叫看作一步)
nn 10
step (單步執行:會進入函式呼叫)
ss 10
8,繼續執行**:
continue (讓程序持續執行,直到遇到斷點,或者程序退出為止)
c9,檢視變數值:
p+變數值
10:檢視函式堆疊:
bt11:設定引數
set args ***
編寫乙個c語言源程式bugging.c如下:
1、用gcc編譯該程式,指令如下:#include static char buf[250];
static char *string;
int main()
2、 執行程式,指令如下:
3、結果如下:
4、gdb除錯
最常見的錯誤:非法記憶體訪問(段錯誤 / segmentation fault)
該種錯誤的除錯步驟:
1,編譯: gcc debugme.c -o debugme -g
2,取消系統對core檔案大小的限制:
ulimit -c unlimited
3,讓有段錯誤的**去死,產生乙個core檔案
./debugme
4,讓gdb幫我們看看在**出錯:
gdb ./debugme core
注:gdb不一定100%地能找到錯誤的地方,如果找不到,還是要自己一步一步地找。我們要根源上寫**的時候就要避免出現此類錯誤,預防大於**。
linux下的gdb除錯
如果編譯時,增加了引數 g,就會生成帶源 除錯符號的可執行檔案。增加的除錯符號一般會使檔案變的大一點。gcc o xx xx.c g 進一步地,就可以執行下面的指令啟動除錯工具進入除錯環境對程式進行除錯了。gdb xx 在除錯環境下,可以輸入下列指令來控制除錯。l n第乙個字母是小寫的l,列出第n行...
linux下的gdb除錯
在看gdb除錯多執行緒多程序之前,我們先來回顧一下gdb除錯的一些基本命令 首先vim乙個檔案,然後進行編譯用命令 gcc o test 所要生成的檔案 test1 你剛剛寫的檔案 g 檢查沒有問題後,再gdb test對你寫的檔案進行除錯。進入gdb後,有這些命令可以用 b 行號 表示在哪一行打了...
Linux 下的GDB除錯
1 啟動gdbgdb test2 檢視 l list簡寫 檢視源程式 預設顯示10行,按回車鍵繼續看10行的。3 設定斷點 b break簡寫 格式 b 空格 行號,在某行設定斷點,eg b 20 info breakpoints 顯示斷點資訊 delete 斷點號n 刪除第n個斷點 disable...