GDB 除錯總結

2021-06-06 05:05:12 字數 2501 閱讀 8177

啟動:

$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...