前言:如果電腦上還沒有裝GDB,戳這裏=博客鏈接
這篇博客僅介紹一些常用的GDB指令
在這篇博文中,我們用一個求最大公約數的程序來做示範
準備步驟:
1.保存好程序 (這裏記爲1.cpp)
2.打開終端 找到1.cpp所在的文件夾 ( 代碼如下)
cd desktop/OI/work //路徑可自己更改
3.編譯程序(代碼如下)
g++ -o 1 1.cpp -g //格式爲 g++ -o 文件名 文件名.cpp -g
4.打開GDB(然後會冒出來一大堆英文,當看到done就說明完成了初始化
gdb 1 // 格式爲 gdb 文件名
開始調試:
下面來學習一些簡單有用的指令:
運行
1.r
運行程序。 按回車後輸入數據( 這裏我們用 12 , 16 )
2.r < infile
r > outfile
重定向輸入輸出
可以代替freopen,用法與freopen差不多
2.l
查看源碼(10行)
l func
顯示func函數的源碼
l
顯示前面的代碼
l -
顯示前面的代碼
set listsize n
設定一次打印n行
show listsize
顯示一次打印的行數
3.Control+x+a 打開GDBGUI界面,更方便地調試/查看源碼
當輸入r後會顯示源代碼
斷點
1.b 7
給某一行設置斷點( 格式爲 b 行號)
2.b gcd
給某個函數設置斷點
3.info b
查詢斷點
4.watch a
觀察點 觀察變量/表達式的值
當觀察的變量或表達式的值發生改變時,程序就會停止。
在使用watch時步驟如下:
1. 使用break在要觀察的變量所在處設置斷電;
2. 使用run執行,直到斷點;
3. 使用watch設置觀察點;
4. 使用continue觀察設置的觀察點是否有變化。
5.info watchpoints
列出所有觀察點
6.b 4 if b!=0
條件斷點 ( b … if ….. )
7.clear 4
刪除斷點 ( clear/delet 行數/函數 )
delet
用於刪除所有斷點
8.commands
爲斷點設定命令
格式:
設定斷點
commands
命令
end
在每個斷點都輸出a,b的值
簡單調試命令
1.n
單步跟蹤. (遇到斷點後繼續執行)
2.s
單步跟蹤. (函數調進入被調用函數體內)
3.f
退出函數
4.u
在一個循環體內單步跟蹤時,這個命令可以運行程序直到退出循環。
5.c
繼續運行程序
6.info program
來查看程序的是否在運行,進程號,被暫停的原因。
查看運行時數據
1.printf "%d", a
打印變量或表達式的值
2.p a
打印變量或表達式的值
如果要打印數組, p *array@len array爲數組名, len爲數組長
自動顯示
1.display a
自動顯示變量
2.info display
查詢自動顯示的變量
3.undisplay num
delet num
讓自動顯示失效 num爲編號
4.disable display num
讓自動顯示失效
enable display num
讓自動顯示恢復
棧
1.bt
打印當前的函數調用棧的所有信息
bt-n
表示打印n層的信息
這個圖表示調用順序爲 main() -> gcd( 12, 16 )
2.f
打印當前棧的信息
f n
打印第n層的棧的信息
info args
打印當前函數參數名及其值
info locals
打印當前函數所有局部變量及其值
改變程序的運行
1.print a=x
修改變量的值並打印 ( a爲變量名,x爲值 )
set var a=x
修改變量的值
2.whatis a
查詢變量類型
3.jump n
跳轉到指定行
4.return n
強制返回
return
(無返回值)
5.print gcd(10,16)
強制調用函數
cal gcd(10,16)
如果返回值是void,則不顯示
參考文獻:
www.cnblogs.com/lonelycatcher/archive/2011/10/09/2204865.html
www.cnblogs.com/ggjucheng/archive/2011/12/14/2288004.html#_Toc311658066
blog.csdn.net/u013982161/article/details/53150579
www.cnblogs.com/chengliangsheng/p/3597010.html