來自
方法一:
gdb方法二:--args program arg1 arg2 arg3
....
gdb program方法三:(gdb
)break
xx //下個斷點
(gdb
)r arg1 arg2 arg3
.....
gdb program(注:gdb中next和n,step和s,break和b,list和l等是等價的,只是為了簡寫)(gdb
)break
xx //下個斷點
(gdb
)set
args arg1 arg2 arg3
.....
一般來說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,你將看不見程式的函...