Linux下GDB的初步除錯 例項

2021-10-10 02:48:59 字數 3225 閱讀 7068

四、 總結

五、 參考資料

●gnu debugger,是gnu工程為gnu作業系統開發的偵錯程式,但它的使用不侷限於gnu作業系統, gdb可以執行在unix、linux甚至microsoft windows。

●使用者能在程式執行時觀察程式的內部結構和記憶體的使用情況。

●gdb是一種基於命令列工作模式下的程式,工作在字元模式,由多個不同的圖形使用者介面前段予以支援,每個前端都能以多種方式提供除錯控制能力。

以下是gdb所提供的的一些功能。

啟動程式,並且可以設定執行環境和引數來執行指定程式。

讓程式在指定斷點處停止執行。

對程式作出相應的調整,這樣就能糾正乙個錯誤後繼續除錯。

注意:

gdb除錯的是可執行檔案,而不是源程式。如果想讓gdb除錯編譯後生成的可執行檔案,在使用gdb工具除錯程式之前,必須使用帶有- g-gdb編譯選項的gcc命令來編譯源程式。

例如:

gcc -g -o test test.c

使用gdb命令的語法如下。

gdb [引數] filename

下面列舉一些常用的引數

●-help:列出所有引數,並作簡要說明

●-symbols=file

-s file:讀出檔案(file)的所有符號

●-core

-c:這裡的core是程式非法執行後core dump後產生的檔案

●-directory

-d:加入乙個原始檔的搜尋路徑。預設搜尋路徑是環境變數中的path所定義的路徑

●-quiet

-q:使用該選項不顯示gdb的介紹和版權資訊等

執行gdb除錯程式通常使用如下的命令。

命令說明

file

指定要除錯的可執行程式

kill

終止正在除錯的可執行程式

next

執行一行源**但並不進入函式內部

list

部分列出源**

step

執行一行源**並不進入函式內部

run執行當前可執行程式

quit

結束gdb除錯任務

watch

可以檢查乙個變數的值而不管它何時被改變

print

列印表示式的值到標準輸出

break n

在指定的第n行源**設定斷點

info break

顯示當前斷點清淡,包括到達斷點處的次數等

info files

顯示被除錯檔案的詳細資訊

info func

顯示所有函式名

info local

顯示當函式中的區域性變數資訊

info prog

顯示被除錯程式的執行狀態

info var

顯示所有的全域性和靜態變數名稱

make

在不退出gdb的情況下執行make工具

shell

在不退出的情況下執行shell命令

continue

繼續執行正在除錯的程式

先檢查一下ubuntu中是否已經安裝了gdb

gdb -v

vim test.c

test.c**如下:

#include

void

showrevertnum

(int inum)

printf

("%d\n"

, inum);}

intmain

(void

)

上面的**可以逆序輸出乙個整型數,比如輸入123,則輸出321。

先來編譯出可執行檔案,看看有沒有語法錯誤。

語法沒有報錯,但明顯出現了邏輯錯誤。可以看出該**實現了整數的逆序輸出,但當輸入100時,逆序輸出了010.這時就要派gdb出場了。

gdb進入介面

出現了(gdb)後就可以在其提示符後輸入相應的除錯命令了。

如果不希望出現gdb的系統進入資訊提示,可以輸入一下命令

-c:繼續執行程式(直到下乙個斷點或者之後沒有斷點就執行完整個程式)。

由斷點設定來看,inum的引數型別並沒有出現問題。

下來我們就試試-n來檢查邏輯錯誤

-n:一步一步執行程式

通過除錯發現,當 inum=10時,inum>10為 0,所以程式直接跳出迴圈,輸出 inum,即 10;因此,最終輸出結果為 010。

通過 gdb 除錯發現了邏輯錯誤,即當 inum=10時,程式會跳出迴圈,為防止此時程式跳出,只需將while (inum > 10)修改為while (inum >= 10)即可。

至此gdb除錯初步完成。

通過此次gdb初步除錯,使我基本了解了gdb的工作原理以及運用場景,以及基本掌握了gdb的除錯命令。應用程式的除錯是開發過程中必不可以的環節之一,使用gdb可以快速,高效的完成程式的設計與糾錯。

1.《嵌入式linux系統開發教程》,電子工業出版社,華清遠見嵌入式學院。

Linux 下用gdb單步除錯多程序方法

ps ef grep my main grep v grep cut c 9 15 xargs kill 當你在程式中使用fork 如果用gdb來除錯.不管是你在子程序是否設定斷點.你都只能在父程序單步除錯,而沒辦法進入到子程序當中進行單步除錯.因為gdb的所有處理 檢視堆疊,記憶體,變數值 都是針...

linux下的gdb除錯

如果編譯時,增加了引數 g,就會生成帶源 除錯符號的可執行檔案。增加的除錯符號一般會使檔案變的大一點。gcc o xx xx.c g 進一步地,就可以執行下面的指令啟動除錯工具進入除錯環境對程式進行除錯了。gdb xx 在除錯環境下,可以輸入下列指令來控制除錯。l n第乙個字母是小寫的l,列出第n行...

linux下的gdb除錯

在看gdb除錯多執行緒多程序之前,我們先來回顧一下gdb除錯的一些基本命令 首先vim乙個檔案,然後進行編譯用命令 gcc o test 所要生成的檔案 test1 你剛剛寫的檔案 g 檢查沒有問題後,再gdb test對你寫的檔案進行除錯。進入gdb後,有這些命令可以用 b 行號 表示在哪一行打了...