GDB常用命令與技巧(超好用的圖形化gdbgui)
阿新 • • 發佈:2019-01-14
目錄
一、常用命令
命令 |
命令縮寫 |
命令說明 |
list | l | 顯示多行原始碼 |
break | b | 設定斷點 |
break if | b if | 當滿足某個條件時停止 |
delete | d | 刪除斷點 |
disable | 禁用斷點 | |
enable | 允許斷點 | |
info | i | 描述程式狀態,比如: i break 顯示有哪些斷點 |
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 | 終止正在除錯的程式 |
常見問題:在檔案組織比較複雜的程式碼中,打斷點時需要指出相對路徑,若是想打斷點到函式名,必須給出完整的名稱空間
二、除錯指令碼
優點:
- 自己定義一些方便的命令,比如列印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命令列