gdb 是一個由 GNU 開源組織發佈的、UNIX/LINUX 操做系統下的、基於命令行的、功能強大的程序調試工具。固然了,通常都是使用 gdb 調試 c/cpp 程序。shell
通常來講,GDB主要幫忙你完成下面四個方面的功能:函數
gdb 功能很強大,所以命令也不少,可是並不見得都能用獲得,對於平常使用來講,知道一些經常使用的就夠用了。工具
代碼在編譯時要加上 -g
選項,生成的可執行文件才能用 gdb 進行源碼級調試。
好比,gcc -g main.c -o main
。-g
選項的做用是在可執行文件中加入源代碼的信息,好比可執行文件中第幾條機器指令對應源代碼的第幾行,但並非把整個源文件嵌入到可執行文件中,因此在調試時必須保證gdb能找到源文件。ui
list linenum,打印出以 linenum 行爲中心的上下幾行源碼。
list func,打印以函數 func 定義所在行爲中心的上下幾行代碼。
list, 打印當前行後面的源程序,每次10行。操作系統
運行程序至第一個斷點處中止。.net
break linenum,在第 linenum 處設置一個斷點。
break func,在 func 函數入口處設置一個斷點。命令行
d 斷點num,刪除第 num 個斷點。調試
執行一行源程序代碼,若是此行代碼中有函數調用,則進入該函數。code
與 step 相反,n 表示不進入函數內容,繼續執行。blog
print 變量名,打印出變量值。
查看各級函數調用及參數。
frame 幀編號,選擇棧幀。
set var 變量=值,修改某變量的值。
或者用 print
指令也能達到目的。
讓程序一直運行到從當前函數返回爲止。
info break,查看全部已經設置的斷點信息。
info locals,查看當前棧幀局部變量的值。
不離開 gdb 就執行 UNIX shell 命令
獲取幫助信息。
離開 gdb。
注意: 上述命令幾乎均可以使用首字母來簡寫長命令。
gdb 可執行文件 產生的coredump文件,好比,gdb test core.3533
。