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