gdb除錯帶引數程式

2021-06-19 06:08:53 字數 2324 閱讀 6453

來自

方法一:

gdb

--args program arg1 arg2 arg3

....

方法二:
gdb program

(gdb

)break

xx //下個斷點

(gdb

)r arg1 arg2 arg3

.....

方法三:
gdb program

(gdb

)break

xx //下個斷點

(gdb

)set

args arg1 arg2 arg3

.....

(注:gdb中next和n,step和s,break和b,list和l等是等價的,只是為了簡寫)

一般來說gdb主要除錯的是c/c++的程式。要除錯c/c++的程式,首先在編譯時,我們必須要 

把除錯資訊加到可執行檔案中。使用編譯 器(cc/gcc/g++)的 -g 引數可以做到這一點。如: 

> cc -g hello.c -o hello 

> g++ -g hello.cpp -o hello 

如果沒有-g,你將看不見程式的函式名、變數名,所代替的全是 執行時的記憶體位址。當你用 

-g把除錯資訊加入之後,並成功編譯目標**以後,讓我們來看看如何用gdb來除錯他。 

啟動 gdb的方法有以下幾種: 

1、gdb

program也就是你的執行檔案,一般在當然目錄下。 

2、gdb core 

用gdb同時除錯乙個執行程式和core檔案,core是程式非法執行後core dump後產生 

的檔案。 

3、gdb

如果你的程式是乙個服務程式,那麼你可以指定這個服務程式執行時的程序id。gd 

b會自動attach上去,並除錯他。program應該在 path環境變數中搜尋得到。 

gdb啟動時,可以加上一些gdb的啟動開關,詳細的開關可以用gdb -help檢視。我在下面只 

例舉一些比較常用的引數: 

-symbols

-s 從指定檔案中讀取符號表。 

-se file 

從指定檔案中讀取符號表資訊,並把他用在可執行檔案中。 

-core

-c 除錯時core dump的core檔案。 

-directory

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

當以gdb 方式啟動gdb後,gdb會在path路徑和當前目錄中搜尋的原始檔 

。 如要確認gdb是否讀到原始檔,可使用l或list命令,看看gdb是否能列出源**。 

在gdb中,執行程式使用r或是run命令。 程式的執行,你有可能需要設定下面四方面的事。 

1、程式執行引數。 

set args 可指定執行時引數。(如:set args 10 20 30 40 50) 

show args 命令可以檢視設定好的執行引數。 

2、 執行環境。 

path 可設定程式的執行路徑。 

show paths 檢視程式的執行路徑。 

set environment varname [=value] 設定環境變數。如:set env user=hchen 

show environment [varname] 檢視環境變數。 

3、工作目錄。 

cd 相當於shell的cd命令。 

pwd 顯示當前的所在目錄。 

4、程式的輸入輸出。 

info terminal 顯示你程式用到的終端的模式。 

使用重定向控制程式輸出。如:run > outfile 

tty命令可以指寫輸入輸出的終端裝置。如:tty /dev/ttyb

具體來說就是

例如乙個程式名為prog 引數為 -l a -c abc

則,執行gcc/g++ -g  prog.c/cpp -o prog

就可以用gdb除錯程式prog

#gdb prog

進入gdb除錯介面

輸入引數命令set args 後面加上程式所要用的引數,注意,不再帶有程式名,直接加引數,如:

set args -l a -c abc

回車後輸入

r

即可開始執行

gdb除錯帶引數程式

一般來說gdb主要除錯的是c c 的程式。要除錯c c 的程式,首先在編譯時,我們必須要 把除錯資訊加到可執行檔案中。使用編譯 器 cc gcc g 的 g 引數可以做到這一點。如 cc g hello.c o hello g g hello.cpp o hello 如果沒有 g,你將看不見程式的函...

gdb除錯帶引數程式

一 問題 如果執行 gdb a.out 1 2 3 肯定會報錯。正確的做法是 gdb args a v1 v2 v3 gdb a,進入gdb後 r v1 v2 v3 gdb a,進入gdb後 設定引數set args v1 v2 v3 再直接 r。通過這三種方法,你就可以除錯帶引數的程式。二 例子 ...

gdb除錯帶引數程式

一般來說gdb主要除錯的是c c 的程式。要除錯c c 的程式,首先在編譯時,我們必須要 把除錯資訊加到可執行檔案中。使用編譯 器 cc gcc g 的 g 引數可以做到這一點。如 cc g hello.c o hello g g hello.cpp o hello 如果沒有 g,你將看不見程式的函...