Linux環境下GDB的使用

來源:互聯網
上載者:User

程式碼中的錯誤可分為數類,除了最容易排除的語法錯誤,編譯器會告訴你錯誤所在外,大部分的錯誤都可以歸類為執行時錯誤。GDB的功能便是尋找執行時錯誤。如果沒有除錯程式,我們只能在程式中加入輸出變數值的指令來瞭解程式執行的狀態。有了GDB除錯程式,我們可以設定在任何地方停止程式的執行,然後可以隨意檢視變數值及更動變數,並逐行執行程式。  


一個除錯程式執行的流程通常是這樣的:    

1. 進入除錯程式並指定可執行檔。  

2. 指定程式碼所在目錄。  

3. 設定斷點後執行程式。  

4. 程式於斷點中斷後,可以(1)檢視程式執行狀態;檢視變數值或變更變數值; 

(2) 逐步執行程式,或是全速執行程式到下一個斷點或是到程式結束為止。  

5. 離開除錯程式。  


1:進入 GDB 並讀入可執行檔 (檔名為 'PROGRAM'),準備進行除錯:  

gdb PROGRAM 


2:指定程式碼所在目錄及檢視程式碼 

2.1:增加目錄 DIR 到搜尋程式碼的目錄列表 (如果你的程式碼和可執行檔放在同一個目錄下,就不須指定程式碼所在目錄。):  

(gdb) directory DIR  

2.2:檢視程式碼,格式計有:  

(gdb) list   => 顯示目前執行程式代碼前後各五行的程式碼;或是顯示從上次 list 之後的程式碼。  

(gdb) list function  => 顯示該程式開始處前後五行的程式碼。  

(gdb) list -  => 上次顯示程式碼的前面的十行。


3:斷點的設定與清除 

3.1:設定斷點(指令為 break,可簡寫為 (b),格式計有:  

(gdb) break filename.c:30    =>; 在 filename.c 的第三十行處停止執行。  

(gdb) break function          =>; 在進入 function 時中斷程式的執行。  

(gdb) break filename.c:function =>; 在程式碼檔 filename.c 中的函數 function 處設定斷點。  

(gdb) break  =>;  在下一個將被執行的命令設定斷點。  

(gdb) break ... if cond   =>; 只有當 cond 成立的時候才中斷。cond 須以 C 語言的文法寫成。  

3.2:顯示各個斷點的資訊。  

(gdb) info break  

3.3:清除斷點(命令為 clear),格式同 break 。例如 :  

(gdb) clear filename.c:30  

3.4:清除斷點,NUM 是在 info break 顯示出來的斷點編號。  

(gdb) delete NUM 


4:全速及逐步執行程式 

4.1:從程式開頭全速執行程式,直到遇到斷點或是程式執行完畢為止。  

(gdb) run  

4.2:在程式被中斷後,全速執行程式到下一個斷點或是程式結束為止 (continue 指令可簡寫為c)。  

(gdb) continue  

4.3:執行一行程式. 若呼叫函數, 則將該包含該函數程式碼視為一行程式 (next 指令可簡寫為 n)。  

(gdb) next  

4.4:執行一行程式. 若呼叫函數, 則進入函數逐行執行 (step 指令可簡寫為 s)。  

(gdb) step  

4.5:執行一行程式,若此時程式是在 for/while/do loop 迴圈的最後一行,則一直執行到迴圈結束後的第一行程式後停止 (until 指令可簡寫為u)。  

(gdb) until  

4.6:執行現行程式到回到上一層程式為止。  

(gdb) finish 


5:檢視及更改變數值 

5.1:print 敘述,顯示該敘述執行的結果 (print 指令可簡寫為 p)。如  

(gdb) print a        => 顯示 a 變數的內容.  

(gdb) print sizeof(a)  => 顯示 a 變數的長度.  

5.2:display 敘述,在每個斷點或是每執行一步時顯示該敘述值。如  

  (gdb) display a  

5.3:更改變數值:  

(gdb) print (a=10)    => 將變數 a 的值設定為 10.  


6:檢視程式執行狀態 

查看程式執行到此時,是經過哪些函數呼叫的程式 (backtrace 指令可簡寫為 bt),也就是查看函數呼叫堆棧。  

(gdb) backtrace 


7:讀取 Core 檔案資訊 

讀入 PROGRAM 及 PROGRAM.CORE 檔,可檢視 Core Dump 時程式變數值及程式流程狀態 。  

gdb  PROGRAM  core  

說明:'core' 檔案是由 PROGRAM 檔執行後,遇到 Core Dump 時產生的 Core 檔案名稱。如果你還需要該 Core 檔,我們建議你將該檔案檔名更改為 PROGRAM.core。在輸入上述命令後,你可以用 GDB 提供的檢視變數值以及檢視程式執行狀態來讀取程式 Core Dump 時的狀態。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.