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
在原始檔filename
的linenum
行處停住
break filename:function
在原始檔filename
的function
函式的入口處停住
break class::function
或function(type,type)
在類class的function函式的入口處停住
break namespace::class::function
在命名空間為namespace的類class的function函式的入口處停住
info b
watch
為表示式(變數)expr設定乙個觀察點。當表示式值有變化時,馬上停住程式。
rwatch
表示式(變數)expr被讀時,停住程式。
awatch
表示式(變數)的值被讀或被寫時,停住程式。
info watchpoints
列出當前所設定了的所有觀察點。
condition
與break 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...