一、問題
如果執行 $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主要除錯的是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。gdb會自動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 /dev/ttyb tty命令可以指寫輸入輸出的終端裝置。
具體來說就是
例如乙個程式名為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 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...
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主要除錯的是c c 的程式。要除錯c c 的程式,首先在編譯時,我們必須要 把除錯資訊加到可執行檔案中。使用編譯 器 cc gcc g 的 g 引數可以做到這一點。如 cc g hello.c o hello g g hello.cpp o hello 如果沒有 g,你將看不見程式的函...