簡介
gdb是一個由GNU開源組織發(fā)布的、Unix/Linux操作系統(tǒng)下的、基于命令行的、功能強大的程序調(diào)試工具。相比于VS里面的圖形化調(diào)試工具,其功能更加強大。
安裝
sudo apt-get install gdb
調(diào)試步驟
- 編譯:gcc -g hello.c -o hello (在編譯選項加入 -g )
- 調(diào)試:gdb hello
- 使用gdb命令進行調(diào)試
常用命令
運行:
- run / r:運行程序,遇到斷點處停止
- continue / c:繼續(xù)執(zhí)行,到下一個斷點處
- next / n:單步執(zhí)行且不進入函數(shù)
- step / s:單步執(zhí)行且進入函數(shù)
- until:在循環(huán)體中運行直到退出循環(huán)
- finish:運行程序直到當(dāng)前函數(shù)完成返回
- call:調(diào)用程序中可見的函數(shù)并可傳參 - call func(params)
- enter(回車鍵):重復(fù)上次指令
- quit / q:退出gdb
斷點
- break n:在第n行設(shè)置斷點
- clear n:清楚第n行的斷點
- break func():在程序func()入口處設(shè)置斷點
- delete n:刪除第n個斷點
- disable n:暫停第n個斷點
- enable n:開啟第n個斷點
- info b:顯示當(dāng)前斷點的設(shè)置情況
- delete breakpoints:清楚所有的斷點
查看源碼
- list / l:列出源代碼,默認10行 - list
- list n:以n行為中心列出前后10行
- list func():顯示該函數(shù)的源代碼
打印表達式
- print / p 表達式:打印表達式的值,表達式可以為變量、字符串、函數(shù)調(diào)用
- print &變量:查看變量所在地址(指針)
- x addr:查看addr地址的內(nèi)存
- display 表達式:設(shè)置每次單步運行后輸出該表達式的值
- watch 表達式:監(jiān)視表達式,當(dāng)其改變時輸出前后變化
- whtatis:查詢變量或函數(shù)
- info function:查詢函數(shù)
- info locals:顯示當(dāng)前堆棧頁的所有變量
- info registers:顯示當(dāng)前寄存器的值
查詢運行信息
- where / bt:當(dāng)前運行的堆棧列表
- bt backtrace:顯示當(dāng)前調(diào)用堆棧
- up / down:改變堆棧顯示的深度
- set args參數(shù):指定運行時的參數(shù)
- show args參數(shù):查看設(shè)置好的參數(shù)
- info program: 查看程序是否在運行,進程號,被暫停的原因
分割窗口
- layout src:顯示源代碼窗口
- layout asm:顯示反匯編窗口
- layout split:顯示源代碼、反匯編窗口
- layout regs:顯示源代碼、反匯編、CPU寄存器窗口
- Ctrl + L:刷新窗口
- Ctrl + x + a:退出layout