在linux平台下使用log+gdb+core,一般能應付絕大多數除錯程式的場景;
使用者文件查閱:
編譯程式時**上-g選項,關閉優化機制和建立符號表以便偵錯程式除錯:gcc/g++ -g
你能用gdb對c/c++程式做什麼?
(1)啟動程式;
(2)使程式在指定條件下停止;
(3)當程式停止時,檢查發生了什麼;
(4)更改程式中的內容,以便可以糾正乙個錯誤並繼續了解了另乙個錯誤
本文主要教會你使用以上四點!
使用gdb啟動程式的最簡單方法是使用乙個引數:
gdb 程式名
使用gdb除錯core檔案的方法是:
gdb 程式名 core
使用gdb除錯正在執行的程式的方法是:
gdb 程式名 程序id
退出gdb請輸入:
quit或者q
使程式開始執行的命令是:
run或者r
使程式單步執行的命令是:
next或者n
使程式繼續執行的命令是:
continue或者c
break locataion或者b locataion
在包含主函式原始檔的38行打乙個斷點:
break 38
在進入test函式時打斷點
break test
在table.cpp原始檔的32行打乙個斷點
break table.cpp:32
假設我們知道函式指標的位址為0x5859c0,則可以在0x5859c0上打乙個斷點
break *0x5859c0
假設你需要在某個條件時啟用斷點,在table.cpp原始檔的32行,當i=32時打乙個斷點
break table.cpp:32 if i == 32
假設你的程式是多執行緒執行,你可能會需要在指定執行緒打斷點
首先檢視當前程式的執行緒資訊:
info threads
然後在斷點命令後新增執行緒id
break locataion thread threadid
info breakpoints
你可以通過命令刪除gdb的斷點,breakpoints 是斷點號
delete breakpoints
當程式停下時,你需要知道當前發生了什麼,可以使用命令檢視當前棧資訊,了解程式執行到**;
breacktrace或者bt
也許你想看看當前這個位置之後源**,則可以執行命令:
list
也許你想看看當前這個位置之前源**,則可以執行命令:
list -
print variate 或者 p variate
在除錯程式過程中,你可能需要修改某些變數的值,則可以執行命令,variate是變數名,value是修改後的值
print variate = value
在除錯程式過程中,你可能需要傳送訊號給當前程式,則可以執行命令,signalvalue是訊號量,一般為1~15
signal signalvalue
在除錯程式過程中,你可能需要強制結束當前程式執行的函式,則可以執行命令,
return
在除錯程式過程中,你可能需要強制呼叫函式,則可以執行命令,function是函式名
call function 或者 print function
好了!學會使用上面這些命令,基本gdb入門了,下面將拓展一些實用的知識。
您可能希望將gdb命令的輸出儲存到檔案中。有幾個命令可以控制gdb的日誌記錄。
啟用日誌記錄:
set logging on
禁用日誌記錄:
set logging off
更改當前日誌檔案的名稱。預設日誌檔案是gdb.txt。
set logging file file
gdb除錯講解,快速入門
使用gdb步驟 啟動程式的方法 gdb 執行程式 一般在當前目錄下,如果不是,要指定路徑 gdb 執行程式 core檔案。通過這個方法可以載入異常出錯時的堆疊資訊 gdb 執行程式 程序id。通過這種方法可以對你正在執行的程式進行除錯。如 設定執行時引數,有兩種方法 在gdb 執行程式 執行引數 啟...
GDB除錯入門
除錯符號 g 是在編譯的時候產生,而非鏈結的時候產生 所以 編譯成.o檔案時候,需要帶這個選項.1.執行命令 gdb 可執行檔案 如果不是 g選項編譯出來的,會直接告訴你,不能除錯 2.通過list標出檔案 多個原始檔可以是 list a.cpp 10 表示列出原始檔a.cpp的第十行 不指定行號,...
GDB除錯入門
用gdb除錯程式 gdb概述 gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像vc bcb等ide的除錯,但如果你是在unix平台下做軟體,你會發現gdb這個除錯工具有比vc bcb的圖形化偵錯程式更強大的功能。所謂 寸有所長,尺有所短 就是這...