Ubuntu下C语言Debug工具GDB【1】安装和使用
1.什么是GDB
ubuntu上可以用來(lái)調(diào)試C,C++程序的debug工具。
2 如何安裝GDB?
保證你的電腦上已經(jīng)裝有g(shù)cc、g++、cmake。
1. 下載最新的gdbwget https://ftp.gnu.org/gnu/gdb/gdb-10.1.tar.gz 2. 解壓包tar -xzvf gdb-10.1.tar.gz 3. 生成makefilecd gdb-10.1/ mkdir build cd build ../configure 4. 編譯安裝make編譯時(shí)會(huì)出現(xiàn)tex相關(guān)錯(cuò)誤,所以先安裝 textinfosudo apt-get install texinfo make -j8 sudo make install2.GDB功能及其對(duì)應(yīng)命令
GDB功能強(qiáng)大,調(diào)試命令也有很多。但是對(duì)常見(jiàn)命令并不多,如下表所示:
| 命令 | 描述 | 參考示例 |
| gdb | 進(jìn)入gdb調(diào)試 | gdb |
| help | 顯示幫助信息 | help |
| quit(q) | 退出gdb調(diào)試環(huán)境 | |
| file?? | 加載被調(diào)試的可執(zhí)行程序文件(文件是經(jīng)過(guò)編譯之后形成的可執(zhí)行文件,在編譯時(shí),應(yīng)該加上-g?選項(xiàng),比如?gcc?-o?test_gdb?test_dgb.c?-g) | file?test_gdb |
| list??行號(hào) | 列出第幾行開(kāi)始的源代碼 | |
| backtrace(bt) | 查看各級(jí)函數(shù)調(diào)用及參數(shù) | |
| finish | 連續(xù)運(yùn)行到當(dāng)前函數(shù)返回為止,然后停下來(lái)等待命令 | |
| frame(f) ?幀編號(hào) | 選擇棧幀 | |
| info(i) ?locals | 查看當(dāng)前棧幀局部變量的值 | |
| list(l) | 列出源代碼,接著上次的位置往下列,每次列十行 | |
| list??函數(shù)名 | 列出某個(gè)函數(shù)的源代碼 | |
| next(n) | 執(zhí)行下一行語(yǔ)句 | |
| print(p) | 打印表達(dá)式的值,通過(guò)表達(dá)式的值可以修改變量的值或者調(diào)用函數(shù) | |
| run | 運(yùn)行調(diào)試的程序(如果程序中沒(méi)有設(shè)置斷點(diǎn),則程序會(huì)一直運(yùn)行到結(jié)束或者出現(xiàn)異常結(jié)束,如果設(shè)置斷點(diǎn),則會(huì)在斷點(diǎn)處停止) | r(run) |
| delete breakpoints?斷點(diǎn)號(hào) | 刪掉此號(hào)的斷點(diǎn) | |
| clear | 清空所有的斷點(diǎn)信息 | clear |
| continue(c) | 從當(dāng)前位置開(kāi)始連續(xù)運(yùn)行程序,直到下一個(gè)斷點(diǎn)或者程序結(jié)束 | c(continue) |
| set ?var | 修改變量的值 | |
| start | 開(kāi)始執(zhí)行程序,停在main函數(shù)第一行語(yǔ)句前面等待命令 | |
| step(s) | 執(zhí)行下一行語(yǔ)句,如果有函數(shù)則進(jìn)入到函數(shù)中 | |
| display??變量名 | 跟蹤查看某個(gè)變量,每次停下來(lái)都顯示它的值 | |
| disable? breakpoints?斷點(diǎn)號(hào) | 禁用此斷點(diǎn) | |
| enable??斷點(diǎn)號(hào) | 啟用此斷點(diǎn) | |
| info(i)? breakpoints | 查看當(dāng)前設(shè)置了哪些斷點(diǎn) | |
| undisplay ?跟蹤顯示行號(hào) | 取消跟蹤顯示 | |
| watch | 設(shè)置觀察點(diǎn) | |
| info(i)?? watchpoints | 查看當(dāng)前設(shè)置了哪些觀察點(diǎn) | |
| x | 從某個(gè)位置開(kāi)始打印存儲(chǔ)單元的內(nèi)容,全部當(dāng)成字節(jié)來(lái)看,而不區(qū)分哪個(gè)字節(jié)屬于哪個(gè)變量 |
3.舉例說(shuō)明
有程序mytest.cpp代碼如下
#include <stdio.h> int func(int n) {int sum=0,i;for(i=0; i<n; i++){sum+=i;}return sum;}int main() {int i;int result = 0;for(i=1; i<=100; i++){result += i;}printf("result[1-100] = %d /n", result );printf("result[1-250] = %d /n", func(250) ); }3.1 編譯的要點(diǎn)
對(duì)源程序進(jìn)行編譯,加上-g選項(xiàng),使其可以進(jìn)行調(diào)試。其結(jié)果是生成可執(zhí)行文件test_gdb,并且可以對(duì)其進(jìn)行g(shù)db調(diào)試(對(duì)于該命令的詳細(xì)解釋,可以查看gcc命令)
gcc?? -o?? test_gdb?? mytest.cpp?? -g
3.2 如何進(jìn)入gdb環(huán)境
進(jìn)入gdb調(diào)試:
gdb
如上圖最后一行所示,代表進(jìn)入gdb調(diào)試,等待用戶命令輸入。
3 .3 加載被跟蹤文件
加載文件
file? test_gdb
顯示加載成功。
3.4? 顯示程序段
list
3.5 如果在設(shè)置斷點(diǎn)之前,輸入r
run
程序正常運(yùn)行,并且停留在第一條執(zhí)行語(yǔ)句上,等待繼續(xù)操作。
參考文章:
GDB調(diào)試從基礎(chǔ)到精通實(shí)例 - azraelly - 博客園
ubuntu-mate下載:
下載地址為:Choose an architecture | Download (ubuntu-mate.org)
總結(jié)
以上是生活随笔為你收集整理的Ubuntu下C语言Debug工具GDB【1】安装和使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ubuntu20.04下安装Docker
- 下一篇: 索爱麦克风免驱动的语音录入测试