1.gdb 介紹gdb 可以在命令列下啟動,通過命令列對程式進行除錯; gdb 也有自己的圖形前端,如 ddd。無論通過何種方式啟動 gdb,通過 gdb 能夠對程式進行如下除錯:
● 執行程式,還可以給程式加上某些引數,指定程式的行為。
● 使程式在特定的條件下停止。
● 檢查程式停止時的執行狀態。
● 改變程式的引數,以糾正程式中的錯誤
2. gdb 基本命令
需要使用 gdb 除錯的程式,在編譯的時候必須加-g 引數,開啟除錯資訊。執行 gdb,除錯程式通常使用如下方式:
gdb 常用的基本命令 命令
功能描述
break
設定斷點:break + 要設定斷點的行號
clear
清除斷點:clear + 要清除斷點的行號
delete
用於清除斷點和自動顯示的表示式的命令
disable
讓所設斷點暫時失效
enable
與disable相對
run執行除錯程式
continute
繼續執行正在除錯的程式
next
執行一行**,但不進入函式內部
step
執行一行**,而且進入函式內部
list
列出源**的一部分
print + 變數名:輸出該變數名的值
watch
watch + 變數名:監視乙個變數的值
quit
退出kill
終止除錯程式
3.gdb 除錯範例
編寫hello_error.c,這裡取名error,是因為這是乙個bug的原始檔
#include int *p = null;
void hello_print(void)
int main(int argc,char *ar**)
1.編譯輸出帶除錯資訊的可執行檔案,這個檔案通常會比一般情況下生成的可執行檔案的大,因為-g 輸出的檔案是包含很多除錯引數在裡面。
2.我們先執行一下hello_error1
./hello_error1
從除錯資訊中我們發現,出現記憶體段錯誤,原因是我們給指標p賦值,這個是指標是野指標,指向的是0位址,現在我們給0位址賦值,所以出現了錯誤。
我們使用gdb來除錯這個程式:
輸入help,可檢視相應的幫助資訊。
輸入 run 命令,開始除錯程式
然後就停止在了錯誤的地方
我們也可以輸入where命令,來定位問題:
很明顯在原始檔14行出現了問題
我們輸入list命令,檢視下原始檔**
我們先在13行打個斷點 break 13,然後輸入run,重新執行,然後程式就會執行到第13行,停止
然後輸入step,進入hello_print函式體,然後在輸入next,執行下一步,輸出hello world
列印輸出p
print p
給非法位址賦值,導致段錯誤
gdb 除錯 vs除錯
一 先要生成二進位制檔案 g g 1.cpp o 1.out g引數不要省,不然 gdb l 引數用不了 二 引數 設定斷點 設定 函式斷點break func 在某行設定斷點break 7 檢視斷點資訊 info break 刪除斷點 d 刪除所有斷點 d 3 刪除第三個 執行 r 下一步 n 逐...
GDB除錯命令以及GDB除錯段錯誤
一 gdb的除錯命令。c語言是 cc g tst.c o tst c 是g g o 生成的檔案 file.cpp c 除錯程式命令 gdb file 啟動,羅列 行數ist 1,break 行數 info break,run r 除錯執行,step s 單步除錯,檢視變數 print p 變數名,檢...
gdb除錯命令
一 gdb常用命令簡介 rrun 執行.程式還沒有執行前使用 c cuntinue 執行到下一斷點處 qquit 退出tab tab命令補全功能 h help幫助s step 跟入函式 nnext 執行下一行的 如果是函式呼叫,也當作一行 執行到此函式返回 b breakpoint 設定斷點,用法 ...