目錄
一、常用命令
命令 |
命令縮寫 |
命令說明 |
list | l | 顯示多行源代碼 |
break | b | 設置斷點 |
break if | b if | 當滿足某個條件時停止 |
delete | d | 刪除斷點(包括watch 點),一般先使用info命令查看斷點,之後使用d 斷點號刪除 |
disable | 禁用斷點 | |
enable | 允許斷點 | |
info | i | 描述程序狀態,比如: i break 顯示有哪些斷點,info thread 哪些線程 |
run | r | 開始運行程序 |
display | disp | 跟蹤查看某個變量,每次停下來都顯示其值 |
p |
打印內部變量值 | |
watch | 監視變量值新舊的變化 | |
step | s | 執行下一條語句,如果該語句爲函數調用,則進入函數執行第一條語句 |
next | n | 執行下一條語句,如果該語句爲函數調用,不會進入函數內部執行(即不會一步步地調試函數內部語句) |
continue | c | 繼續程序的運行,直到遇到下一個斷點 |
finish | 如果進入了某個函數,返回到調用調用它的函數,jump out | |
set var name = v | 設置變量的值 | |
backtrace | bt | 查看函數調用信息(堆棧) |
start | st | 開始執行程序,在main函數中的第一條語句前停下 |
frame | f | 查看棧幀,比如 frame 1 查看1號棧幀 |
quit | q | 離開gdb |
edit | 在gdb中進行編輯 | |
whatis | 查看變量的類型 | |
search | 搜索源文件中的文本 | |
file | 裝入需要調試的程序 | |
kill | k | 終止正在調試的程序 |
常見問題:在文件組織比較複雜的代碼中,打斷點時需要指出相對路徑,若是想打斷點到函數名,必須給出完整的命名空間
線程調試相關
1、info thread顯示所有的線程信息,前面帶*號的是當前線程
2、thread + (info thread中的線程號) 跳轉到相應的線程,之後一直在其中執行,直到阻塞後纔會跳到其他線程
3、附着線程:先在終端使用ps -Tef | grep (程序名) 查看所有相關的線程,其中-T表示顯示線程,否則只有進程級的顯示。進入gdb後attach + (ps出來的線層號) 附着線程進行調試
其他的詳細使用可以見這篇博客:https://www.cnblogs.com/xuxm2007/archive/2011/04/01/2002162.html
tui相關
tui是gdb自帶的圖形界面,比較直觀,後面有詳細介紹,這裏簡單說一下切換方法和常用命令
1、gdb -tui + (可執行程序) 直接進入tui圖形界面
2、gdb進入後,使用命令focus進入tui圖形界面,或者使用快捷鍵:Ctl+x+a (注意按鍵順序,記憶:x:focus,a:another)
3、在tui中使用相同的快捷鍵Ctl+x+a返回到gdb原生界面
4、在gdb中↑和↓切換上一個命令和下一個命令,但是在tui中只是控制代碼視圖。想達到切換命令的目的,使用Ctl+n (記憶:next)和Ctl+p(記憶:previous),這其實就是gdb的原生快捷鍵
二、調試腳本
優點:
- 自己定義一些方便的命令,比如打印STL容器中的內容
- 不用每次打開gdb都要重新打一次斷點
使用方法:
一般有三種方法:https://blog.csdn.net/cnsword/article/details/16337031
好用的調試腳本推薦:
- 查看STL容器:http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt
- gdb init:https://github.com/gdbinit/Gdbinit/blob/master/gdbinit
三、圖像界面
1、gdb自帶的簡易圖像界面tui
使用方法:
gdb --tui a.out
效果:
使用方法詳見另外一篇博客:
https://blog.csdn.net/xu415/article/details/19021759
2、gdbgui
將調試的gui在瀏覽器中顯示
a、安裝pipx
curl https://raw.githubusercontent.com/cs01/pipx/master/get-pipx.py | python3
b、安裝gdbgui
pipx install gdbgui
- 使用
gdbgui -p 10001 -r "a.out"
-p 10001表示設定的端口是10001,-r 表示是遠程remote調試模式(即調試界面不在Linux機上)
運行成功如圖所示
之後通過Chrome瀏覽器連接相應的地址,需要強調的是可能需要關閉Linux上的防火牆,效果如下:
上面是漂亮的圖形化界面,右邊是各種監視窗口,下面是gdb命令行