1. 程式人生 > >Ubuntu下GDB除錯C語言程式

Ubuntu下GDB除錯C語言程式

轉自:http://zhgeaits.me/other/2013/03/17/gdb-study-notes.html,感謝博主。

1.GDB是什麼

GDB是GNU開源組織釋出的一個UNIX下的程式除錯工具,專門用來除錯C,C++這些程式的了,而且都是命令列模式的。

2.準備工作

平時我們在IDE開發得時候,必須在執行的時候選擇debug模式,否則斷點就無效了。因此,在用gcc編譯的時候也是需要一些編譯引數的。

2.1編譯

使用GCC編譯時要新增-g選項來把原始碼編譯進去,這樣除錯就可以看到原始碼了,否則除錯很不方便,很多命令用不了。例如:

gcc helloword.c -o helloword -g

2.2執行除錯

gdb helloword //也可以直接執行gdb,再使用命令file載入程式。

3.常用操作命令

3.1顯示程式碼

l命令(list的縮寫,直接list也可以)顯示下10行程式碼,加一個行號引數則顯示該行號開始的10行程式碼,如:

l 3

加兩個引數,則顯示兩個行號之間的程式碼,如:

l 20, 30

3.2設定斷點

b(break的縮寫,直接break也可以),可以指定行號,也可以指定函式,例如b 11, 或者break main.

3.3檢視和刪除斷點

info break(i b也可以)可以檢視當前設定的斷點

clear linenumber 可以刪除指定行的斷點

Delete breaknumber 可以刪除指定斷點編號的斷點

3.4執行程式

r(run的縮寫,也可以直接run)就能跑程式,如果你的程式需要讀取引數,可以在後面新增引數

3.5單行執行

n(next的縮寫,也可以直接next),執行一行程式碼,就是step over的意思。如果設定有斷點,程式執行停在斷點行,然後輸入n,就可以step over了。

3.6跟蹤進入(步入)

s(step的縮寫,也可以直接step)命令相當於step into, 如果停在了函式行,那麼就可以輸入s,進入該函數了。

3.7列印變數

p 變數名,就可以列印變數的值了,例如 print a。也可以print 表示式,而且表示式可以修改變數的值。

3.8繼續執行

c(continue的縮寫),相當於IDE上面的三角行執行按鈕,直接執行到下一個斷點或者結束。

3.9檢視堆疊

bt(backtrace的縮寫,也可以直接backbrace),可以檢視堆疊情況,對於進入某個函式的時候特別有用,可以看到函式引數的值變化。

3.10退出函式

finish退出函式除錯,還是聽方便的。

3.11執行緒除錯

Info threads可以顯示當前的執行緒,帶星號的是當前除錯的執行緒,即活動執行緒,其他執行緒的輸出結果看不到,必須切換。

thread number可以切換到指定號碼的執行緒進行除錯。

3.12退出

q(quit)退出

4.其他

4.1幫助

Help command,help加任何一個命令就可以看到該命令的所有用法了。

4.2與VIM整合

這個需要重新編譯vim,有點麻煩,先用原生的,用熟悉再說

4.3更多

以上是簡單的應用,足夠了,以後遇到問題需要更多的話再去man gdb和看官網