除錯是所有程式設計師都會面臨的問題。如何提高程式設計師的除錯效率,更好更快地定位程式 中的問題從而加快程式開發的進度,是大家共同面對的。就如讀者熟知的 windows 下的一些 除錯工具,如 vc 自帶的如設定斷點、單步跟蹤等,都受到了廣大使用者的讚賞。
那麼,在 linux 下有什麼很好的除錯工具呢? 下面所介紹的 gdb 偵錯程式是一款 gnu 開發組織並發布的 unix/linux 下的程式除錯工 具。雖然,它沒有圖形化的友好介面,但是它強大的功能也足以與微軟的 vc 工具等媲美。 下面就請跟隨筆者一步步學習 gdb 除錯。
除錯介面:
注意,gdb 進行除錯的是可執行檔案,而不是如「.c」的源**,因 此,需要先通過 gcc 編譯生成可執行檔案才能用 gdb 進行除錯。
gcc -g test.c -o test
gdb test (test為檔名)
在 gdb 中鍵入「l」( list)就可以檢視所載入的檔案,如下所示
如果顯示不全,可以多按幾次l。
可以看出,gdb 列出的源**中明確地給出了對應的行號,這樣就可以大大地方便** 的定位。
設定斷點是除錯程式中是乙個非常重要的手段,它可以使程式到一定位置暫停它的 執行。因此,程式設計師在該位置處可以方便地檢視變數的值、堆疊情況等,從而找出** 的癥結所在。
在 gdb 中設定斷點非常簡單,只需在「b」後加入對應的行號即可(這是最常用的方式,另外還有其他方式設定斷點)
如下所示:
b 13
在設定完斷點之後,使用者可以鍵入「info b」來檢視設定斷點情況,在 gdb 中可以設定 多個斷點。
接下來就可執行**了,gdb 預設從首行開始執行**,可鍵入「r」( run)即可(若想 從程式中指定行開始執行,可在 r 後面加上行號)。
可以看到,程式執行到斷點處就停止了。
(gdb) p n
$1 = 0
(gdb) p i
$2 = 134518440
在此處,為什麼變數「i」的值為如此奇怪的乙個數字呢?原因就在於程式是在斷點設定 的對應行之前停止的,那麼在此時,並沒有把「i」的數值賦為零,而只是乙個隨機的數字。 但變數「n」是在第四行賦值的,故在此時已經為零。
gdb 在顯示變數值時都會在對應值之前加上「n」標
記,它是
當前變數
值的引用
標記,所
以以後若
想再次引
用此變數
就可以直
接寫作「
n」標記,它是當前變數值的引用標記,所以 以後若想再次引用此變數就可以直接寫作「
n」標記,它
是當前變
量值的引
用標記,
所以以後
若想再次
引用此變
量就可以
直接寫作
「n」,而無需寫冗長的變數名。
單步執行可以使用命令「n」( next)或「s」( step),它們之間的區別在於:若有函式調 用的時候, 「s」會進入該函式而「n」不會進入該函式。因此, 「s」就類似於 vc 等工具中的 「step in」
, 「n」類似與 vc 等工具中的「step over」。它們的使用如下所示:
(gdb) n the sum of 1-m is 1275 7 for(i=1; i<=50; i++) (gdb) s sum (m=50) at test.c:16 16 int i,n=0;
可見,使用「n」後,程式顯示函式 sum的執行結果並向下執行,而使用「s」後則進入 到 sum函式之中單步執行。
在檢視完所需變數及堆疊情況後,就可以使用命令「c」( continue)恢復程式的正常執行 了。這時,它會把剩餘還未執行的程式執行完,並顯示剩餘程式中的執行結果。以下是之前 使用「n」命令恢復後的執行結果:
(gdb) c continuing. the sum of 1-50 is :1275
program exited with code 031.
可以看出,程式在執行完後退出,之後程式處於「停止狀態」。
在 gdb 中,程式的執行狀態有「執行」、 「暫停」和「停止」3種,其中「暫停」狀態為程式遇 到了斷點或觀察點之類的,程式暫時停止執行,而此時函式的位址、函式引數、函式內的局 部變數都會被壓入「棧」( stack)中。故在這種狀態下可以檢視函式的變數值等各種屬性。但 在函式處於「停止」狀態之後,「 棧 」就會自動撤銷,它也就無法檢視各種資訊了。
GDB偵錯程式
偵錯程式gdb 一 啟動和退出gdb gdb除錯的物件是可執行檔案,而不是程式的源 如果要使乙個可執行檔案可以被gdb除錯,那麼在使用編譯器gcc編譯程式時需要加入 g選項。gdb除錯乙個程式的命令格式是 gdb 程式檔名 也可以在linux提示符下,直接輸入gdb,然後使用file命令裝入要除錯的...
gdb偵錯程式
在使用gdb偵錯程式之前,必須在編譯程式時加上 g選項 功能 顯示上次內容之前或之後的10行內容,首次使用顯示main 函式之前或之後的10行內容 命令 list 簡稱 l 功能 顯示引數行之前和之後的10行內容.命令 list line number 簡稱 l 10 功能 顯示原始檔從一行到另一行...
gdb偵錯程式
gdb是gnu發布的一款強大的除錯功能 gdb主要完成下面三個方面的功能 1 啟動被除錯程式 2 讓被除錯的程式在指定的位置停住 3 當程式停住時,可以檢視程式的狀態 變數值 gcc g test.c o test 生成除錯資訊 gdb test 啟動gdb gdb除錯工具相關命令 gdb run ...