gdb日常使用
gdb 是一個由 GNU 開源組織發(fā)布的、UNIX/LINUX 操作系統(tǒng)下的、基于命令行的、功能強大的程序調(diào)試工具。當(dāng)然了,一般都是使用 gdb 調(diào)試 c/cpp 程序。
一般來說,GDB主要幫忙你完成下面四個方面的功能:
gdb 功能很強大,因此命令也很多,但是并不見得都能用得到,對于日常使用來說,知道一些常用的就夠用了。
準(zhǔn)備工作
代碼在編譯時要加上 -g 選項,生成的可執(zhí)行文件才能用 gdb 進行源碼級調(diào)試。
比如,gcc -g main.c -o main。
-g 選項的作用是在可執(zhí)行文件中加入源代碼的信息,比如可執(zhí)行文件中第幾條機器指令對應(yīng)源代碼的第幾行,但并不是把整個源文件嵌入到可執(zhí)行文件中,所以在調(diào)試時必須保證gdb能找到源文件。
參數(shù)說明
list/l
list linenum,打印出以 linenum 行為中心的上下幾行源碼。
list func,打印以函數(shù) func 定義所在行為中心的上下幾行代碼。
list, 打印當(dāng)前行后面的源程序,每次10行。
run/r
運行程序至第一個斷點處停止。
break/b
break linenum,在第 linenum 處設(shè)置一個斷點。
break func,在 func 函數(shù)入口處設(shè)置一個斷點。
d
d 斷點num,刪除第 num 個斷點。
step/s
執(zhí)行一行源程序代碼,如果此行代碼中有函數(shù)調(diào)用,則進入該函數(shù)。
next/n
與 step 相反,n 表示不進入函數(shù)內(nèi)容,繼續(xù)執(zhí)行。
print/p
print 變量名,打印出變量值。
backtrace/bt
查看各級函數(shù)調(diào)用及參數(shù)。
frame/f
frame 幀編號,選擇棧幀。
set
set var 變量=值,修改某變量的值。
或者用 print 指令也能達(dá)到目的。
finish
讓程序一直運行到從當(dāng)前函數(shù)返回為止。
info/i
info break,查看所有已經(jīng)設(shè)置的斷點信息。
info locals,查看當(dāng)前棧幀局部變量的值。
shell
不離開 gdb 就執(zhí)行 UNIX shell 命令
help/h
獲取幫助信息。
quit/q
離開 gdb。
注意: 上述命令幾乎都可以使用首字母來簡寫長命令。
調(diào)試 coredump 文件
gdb 可執(zhí)行文件 產(chǎn)生的coredump文件,比如,gdb test core.3533。
參考
總結(jié)
- 上一篇: Java8之Stream-函数式接口
- 下一篇: 千万条据下的分页