啟動:
$gdb || $gdb
然後(gdb)file
執行:
(gdb)run <
該程式本身的命令列引數
>
檢視**
:
(gdb)list
簡寫為(gdb)l
技巧(gdb)list 1,20
//檢視1到
20行的**
使用斷點
:
建立斷點
(gdb)break
//可以簡寫為
(gdb)b
(gdb)b
|| :
//這種是為還沒有開啟的源**設定斷點
(gdb)b
|| :
|| //
在乙個實體地址設定斷點
檢視斷點
(gdb)info b
刪除斷點
(gdb)delete
(gdb)clear
|| :
條件斷點
(gdb)break 通常是函式名)> if =
//用於在滿足某個條件時中斷執行,在該operator處暫停
執行過程:
單步跟蹤:
(gdb)step //
縮寫s往下執行:
(gdb)next //
縮寫n
檢查資料:
(gdb)display
//例如(gdb)display stack->index
(gdb)print
//縮寫p
改變資料:
(gdb)set =
//例如set stack->index=100
檢查堆疊:
(gdb)backtrace
//縮寫bt, 將會列印當前呼叫的堆疊,從深到淺
停止程式:
(gdb)quit
//縮寫q
多程序除錯:
跟蹤子程序:
(gdb)set follow-fork-mode child
跟蹤父程序:
(gdb)set follow-fork-mode parent
設定gdb在fork時詢問跟蹤哪乙個程序:
(gdb)set follow-fork-mode ask
多執行緒除錯:
如果某一行**被多個執行緒使用,可以這樣設定斷點:
(gdb)b pos.c:17 thread 5
//在地pos.c的17行設定斷點,但只對第5個執行緒生效。
(gdb)info threads
//檢視當前應用程式中所有的執行緒
(gdb)b pos.c:17 thread 5 if ret > 0
//在pos.c的17行設定斷點,當內部棧變數ret > 0 時中斷
去指定執行緒:
(gdb)thread
鎖定排程器來避開gdb根據優先權來改變當前執行緒:
(gdb)set scheduler-locking on/off
確定當前模式
(gdb)show scheduler -locking
想所有執行緒應用乙個命令:
除錯已有的程序:
$gdb
掛接指定程序 :(gdb)attach 《程序號》
脫離指定程序 :(gdb)dettach
除錯核心轉儲檔案:
$test
產生乙個core檔案,需要設定系統環境,見我的部落格文章
??????????????????????????,沒有嘗試過的
(gdb)wacth 監控乙個變數改變
(gdb)tbreak臨時斷點
斷點禁用啟用
GDB除錯總結
一 core分析 1 檢視命令 ulimit c 啟動命令 ulimit c ulimited 檢視core檔案 gdb c core.a.out 2 生成core檔案的路徑在檔案 etc sysctl.conf中 cat etc sysctl.conf sysctl.conf檔案中科院設定的格式符...
gdb除錯總結
gdb是linux環境下最強大的除錯工具,可以除錯未執行的程式或者正在執行的程式,還可以分析程式崩潰的coredump檔案,這些的前提是,程式在編譯時新增了 g選項開啟了除錯資訊。使用方法 gdb program 對於有引數的,可以通過gdb內執行 set args param 來設定引數,或者gd...
GDB 基礎除錯總結
gdb是乙個由gnu開源組織發布的 unix linux作業系統下的 基於命令列的 功能強大的程式除錯工具。基礎除錯命令 命令 解釋 示例 file 檔名 載入被除錯的可執行程式檔案。因為一般都在被除錯程式所在目錄下執行gdb,因而文字名不需要帶路徑。gdb file gdb sample rrun...