GDB常用命令與技巧(超好用的圖形化gdbgui)

目錄

一、常用命令

二、調試腳本

三、圖像界面


一、常用命令

命令

命令縮寫

命令說明

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 跟蹤查看某個變量,每次停下來都顯示其值
print

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

好用的調試腳本推薦:

三、圖像界面

1、gdb自帶的簡易圖像界面tui

        使用方法:

gdb --tui a.out

         效果:

使用方法詳見另外一篇博客:

https://blog.csdn.net/xu415/article/details/19021759

2、gdbgui

將調試的gui在瀏覽器中顯示

https://gdbgui.com/

        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命令行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章