1.1 源碼安裝sass
1.1.1 http://ftp.gnu.org/gnu/gdb/下載gdb源碼包,或者wget http://ftp.gnu.org/gnu/gdb/gdb-8.0.1.tar.gz命令下載代碼函數
1.1.2 tar -zxvf gdb-8.0.1.tar.gzui
1.1.3 ./configurespa
1.1.4 make命令行
1.1.5 sudo make install調試
1.1.6 查看是否安裝成功 gdb -vcode
1.2 命令安裝 blog
1.2.1 #sudo apt-get update
1.2.2 #sudo apt-get install gdb
2. 快速入門
2.1 vi一段代碼 進程
#include <stdio.h> int main() { int a = 1; int b = a; printf("a = %d, b =%d\n", a, b); return 0; }
2.2 帶調試信息編譯ip
gcc –o demo demo.c -g
2.3 進入GDB
gdb demo
2.4 加斷點
breakpoint demo.c:8
3. 經常使用命令
命令 |
描述 |
backtrace(bt) |
查看各級函數調用及參數 |
finish |
連續運行到當前函數返回爲止,而後停下來等待命令 |
frame(f) 幀編號 |
選擇棧幀 |
info(i) locals |
查看當前棧幀局部變量的值 |
list(l) |
列出源代碼,接着上次的位置往下列,每次列十行 |
list 行號 |
列出第幾行開始的源代碼 |
list 函數名 |
列出某個函數的源代碼 |
next(n) |
執行下一行語句 |
print(p) |
打印表達式的值,經過表達式的值能夠修改變量的值或者調用函數 |
quit(q) |
退出gdb調試環境 |
set var |
修改變量的值 |
start |
開始執行程序,停在main函數第一行語句前面等待命令 |
step(s) |
執行下一行語句,若是有函數則進入到函數中 |
break(b) 行號 |
在某一行設置斷點 |
break 函數名 |
在某個函數開頭設置斷點 |
break(b)… if… |
設置條件斷點 |
continue(c) |
從當前位置開始連續運行程序 |
delete breakpoints 斷點號 |
刪掉此號的斷點 |
display 變量名 |
跟蹤查看某個變量,每次停下來都顯示它的值 |
disable breakpoints 斷點號 |
禁用此斷點 |
enable 斷點號 |
啓用此斷點 |
info(i) breakpoints |
查看當前設置了哪些斷點 |
run(r) |
從頭開始連續運行程序 |
undisplay 跟蹤顯示行號 |
取消跟蹤顯示 |
watch |
設置觀察點 |
info(i) watchpoints |
查看當前設置了哪些觀察點 |
x |
從某個位置開始打印存儲單元的內容,所有當成字節來看,而不區分哪一個字節屬於哪一個變量 |
disassemble |
反彙編當前函數或者指定的函數,單獨用disassemble命令是反彙編當前函數,若是disassemble命令後面跟函數名或地址則反彙編指定的函數 |
si | 能夠一條指令一條指令地單步調試。 |
info registers | 能夠顯示全部寄存器的當前值。在gdb中表示寄存器名時前面要加個$,例如p $esp能夠打印esp寄存器的值。 |
set args 'command-line' | 給執行的程序傳命令行參數 |
set follow-fork-mode child/parent | 設置gdb在fork以後跟蹤子進程/父進程 |
s(stepin) | 進入子函數 |
4. attach調試
1. ps aux查看系統進程pid
2. gdb attach pid進入調試改程序
5. 推薦連接:
1. https://www.kancloud.cn/wizardforcel/gdb-tips-100/146708