除錯程式要用到gdb這個除錯工具,gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。
一般來說,gdb主要幫助你完成下面四個方面的功能:
1、啟動你的程式,可以按照你的自定義的要求隨心所欲的執行程式。
2、可讓被除錯的程式在你所指定的調置的斷點處停住。(斷點可以是條件表示式)
3、當程式被停住時,可以檢查此時你的程式中所發生的事。
4、動態的改變你程式的執行環境。
那麼該如何使用gdb 這個強大的除錯工具來除錯自己的程式呢?
首先,在編譯時需要加上-g或-ggdb選項。
接著,使用格式 gdb filename 來呼叫gdb 或直接在終端輸入gdb來進入除錯模式。
最後,利用gdb除錯選項,進行一系列的操作,直到滿足你的要求,找到程式中的錯誤,了解程式的執行過程。
當然了,gdb除錯選項有很多,下面羅列一些比較常用的。
gdb 常用命令:
file ------ 裝入想要除錯的可執行檔案
run ------ 執行當前被除錯的程式
kill ------ 終止正在除錯的程式
step ------ 執行一行源**並進入函式內部
next ------ 執行一行源**但不進入函式內部
break ------在**裡設定斷點,這將使得程式在執行到這裡時被掛起
print --------列印表示式或變數的值,或列印記憶體中某個變數開始的一段連續區域的值,還可以用來對變數進行賦值。
display -----設定自動顯示的表示式或變數,當程式停止或在單步跟蹤時,這些變數會自動顯示其當前值 。
list----------- 列出產生執行檔案的源**的一部分
quit ----------退出gdb
watch --------使你能監視乙個變數的值而不管它何時被改變
backtrace---- 回溯跟蹤
frame n ----- 定位到發生錯誤的**段, n為backtrace命令的輸出結果中的行號
examine ----- 檢視記憶體位址中的值
jump ---------- 使程式跳轉執行
signal -------- 產生訊號量
return -------- 強制函式返回
call ------------ 強制呼叫函式
make ---------- 使用記不退出gdb就可以重新產生可執行檔案
shell ----------- 使使用者不離開gdb就可以執行shell命令。
下面對上面的命令中一些重要的命令,給出具體的用法
break 命令用法:
break 在進入指定函式時停住
break 在指定行號停住
break +offset 在當前行的前面offset行停住
break -offset 在當前行的後面offset行停住
break filename:linenum 在指定檔案的的指定行停住
break filename:function 在指定檔案的指定函式處停住
break *address 在程式執行記憶體中指定位址處停住
break 在下條命令處停住
break if 在條件成立時停止
display相關gdb命令:
undisplay 刪除自動顯示
delete display 刪除自動顯示
disable display 不刪除自動顯示,只是讓其失效
enable display 不刪除自動顯示,只是讓其恢復
info display 檢視display設定自動顯示的資訊
檢視源程式:
list 列出指定行周圍的源程式
list 列出指定函式的源程式
list 列出當前行前後的源程式
liset - 列出當前行前面的源程式
list + 列出當前行後面的源程式
set listsize 設定一次顯示源**的行數
show listsize 檢視當前的listsize 設定
list ,檢視指定的first行到last行的源程式
這些命令很多,使用者也很靈活,當然,不可能都記住,其實這些命令不用記,在用得時候可以看gdb的幫助文件。
注意事項:
1. 上述大多數命令可以使用簡寫,如break 只接輸入b即可,又如,run 直接輸入r即可。
2. 如果希望從斷點處繼續執行程式,輸入c即可
3. 如果希望執行到函式結束,輸入finish
4. 檢視堆疊資訊,輸入bt
5. 檢視麼存,輸入 x/64xh+記憶體位址
6. 刪除斷點,delete break+斷點序號
8 檢視彙編**:disassemble+函式名
對於這麼多的命令,用到時查一下即可。
linux 基本篇 學習筆記(3) gdb除錯
進行gdb除錯是在linux下進行程式開發的常用操作。如 檢視 list 當前檔案 l 非當前檔案 l 行號 斷點操作 break b 設定斷點 b 行號 b 函式名 b 檔名 行號 b檔名 函式名 檢視斷點 info i b 刪除斷點 d num 斷點的編號 刪除多個 d num1 num2 d ...
C語言學習(八)GDB
除錯過程 1 生成可執行檔案時,需要在命令結尾加上 g 標誌可進行除錯 gcc o test main.c g 2 引導程式 gdb test gdb 要除錯的檔名 如果未指定名,則需要在啟動後指定檔案的載入 gdb 不指定檔名 file 檔名 後續載入檔案 3 設定輸入引數 setargs 3 設...
linux下的C語言開發(gdb除錯)
編寫 過程中少不了除錯。在windows下面,我們有visual studio工具。在linux下面呢,實際上除了gdb工具之外,你沒有別的選擇。那麼,怎麼用gdb進行除錯呢?我們可以一步一步來試試看。cpp view plain copy include int iterate int value...