GDB基礎用法

2021-07-30 14:05:33 字數 3545 閱讀 7758

gdb(gnu debugger)是gcc的除錯工具。其功能強大,現描述如下:

gdb主要幫忙你完成下面四個方面的功能:

1.啟動你的程式,可以按照你的自定義的要求隨心所欲的執行程式。

2.可讓被除錯的程式在你所指定的調置的斷點處停住。(斷點可以是條件表示式)

3.當程式被停住時,可以檢查此時你的程式中所發生的事。

4.動態的改變你程式的執行環境。

一般來說gdb主要除錯的是c/c++的程式。要除錯c/c++的程式,首先在編譯時,我們必須要把除錯資訊加到可執行檔案中。使用編譯器(cc/gcc/g++)的 -g 引數可以做到這一點。如:

gcc -g hello.c -o hello

g++-g hello.cpp -o hello

如果沒有-g,你將看不見程式的函式名、變數名,所代替的全是執行時的記憶體位址。當你用-g把除錯資訊加入之後,並成功編譯目標**以後,讓我們來看看如何用gdb來除錯他。

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

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

如果你的程式是乙個服務程式,那麼你可以指定這個服務程式執行時的程序id。gdb會自動attach上去,並除錯他。program應該在path環境變數中搜尋得到。

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

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

run (r)啟動程式

不指定執行引數r

指定執行引數r 10 20 30 40 50

cd相當於shell的cd命令。

pwd顯示當前的所在目錄。

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

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

tty命令可以設定輸入輸出使用的終端裝置。如:tty /dev/tty1

break設定斷點,可以簡寫為b

b 10設定斷點,在源程式第10行

b func設定斷點,在func函式入口處

在進入指定函式時停住:

c++中可以使用

class::function或function(type,type)格式來指定函式名。如果有命名空間,可以使用namespace::class::function或者function(type,type)格式來指定函式名。

break filename:linenum

在原始檔filenamelinenum行處停住

break filename:function

在原始檔filenamefunction函式的入口處停住

break class::functionfunction(type,type)

在類class的function函式的入口處停住

break namespace::class::function

在命名空間為namespace的類class的function函式的入口處停住

info b

watch為表示式(變數)expr設定乙個觀察點。當表示式值有變化時,馬上停住程式。

rwatch表示式(變數)expr被讀時,停住程式。

awatch表示式(變數)的值被讀或被寫時,停住程式。

info watchpoints列出當前所設定了的所有觀察點。

conditionbreak if類似,只是condition只能用在已存在的斷點上

修改斷點號為bnum的停止條件為expression

condition bnum expression

清楚斷點號為bnum的停止條件

condition bnum

ignore忽略停止條件幾次

表示忽略斷點號為bnum的停止條件count次

ignore bnum count

clear清除所有的已定義的停止點。

clear function清除所有設定在函式上的停止點。

clear linenum清除所有設定在指定行上的停止點。

clear filename:linenum清除所有設定在指定檔案:指定行上的停止點。

delete [breakpoints] [range...]刪除指定的斷點,breakpoints為斷點號。如果不指定斷點號,則表示刪除所有的斷點。range表示斷點號的範圍(如:3-7)。其簡寫命令為d。

比刪除更好的一種方法是disable停止點,disable了的停止點,gdb不會刪除,當你還需要時,enable即可,就好像**站一樣。

disable [breakpoints] [range...]disable所指定的停止點,breakpoints為停止點號。如果什麼都不指定,表示disable所有的停止點。簡寫命令是dis.

enable [breakpoints] [range...]enable所指定的停止點,breakpoints為停止點號。

enable [breakpoints] once range…enable所指定的停止點一次,當程式停止後,該停止點馬上被gdb自動disable。

enable [breakpoints] delete range…enable所指定的停止點一次,當程式停止後,該停止點馬上被gdb自動刪除。

我們可以使用gdb提供的command命令來設定停止點的執行命令。也就是說,當執行的程式在被停止住時,我們可以讓其自動執行一些別的命令,這很有利行自動化除錯。對基於gdb的自動化除錯是乙個強大的支援。

commands [bnum]

… command-list …

end

為斷點號bnum指寫乙個命令列表。當程式被該斷點停住時,gdb會依次執行命令列表中的命令。

gdb的基礎詳細用法

run 簡寫r 執行程式,當遇到斷點後,程式會在斷點處停止執行,等待使用者輸入下一步的命令。continue 簡寫c 繼續執行,到下乙個斷點處 或執行結束 next 簡寫n 單步跟蹤程式,當遇到函式呼叫時,直接呼叫,不進入此函式體 step 簡寫s 單步除錯如果有函式呼叫,則進入函式 與命令n不同,...

GDB 基本用法

在原來的的選項上再加上 g 選項,如 gcc g wall o2 o test test.c 或者 gcc g o test test.c。有一點需要注意的是除錯時最好去掉優化選項,比如內聯 inline 函式 優化 去掉函式呼叫,而將函式 在呼叫的位置展開 該函式名上就無法設定斷點。這是因為內聯函...

GDB基本用法

相關 gdb的使用 當程式出錯並產生core 時 快速定位出錯函式的辦法 gdb 程式名 core檔名 一般是core,也可能是core.x 除錯程式使用的鍵 r run 執行.程式還沒有執行前使用 c cuntinue 繼續執行。執行中斷後繼續執行 q 退出 kill 終止除錯的程式 h help...