gdb 調試工具使用大全

gdb 調試工具使用大全

一、常用命令

命令 命令縮寫 命令說明
list l 顯示多行源代碼
break fun b fun 設置斷點
break N b N 在第n行打斷點
break file.c:N b file.c:N 在當前源文件file.c的第N行設置斷點
break classA::fun b classA::fun 在classA的fun函數處設置斷點
break if b if 當滿足某個條件時停止
delete N d N 刪除斷點(包括watch 點),一般先使用info命令查看斷點,之後使用d 斷點號刪除
disable 禁用斷點
enable 允許斷點
info i 描述程序狀態,比如: i b 顯示有哪些斷點,i th 哪些線程
run r 開始運行程序
display disp 跟蹤查看某個變量,每次停下來都顯示其值
print p 打印內部變量值
watch 監視變量值新舊的變化
step N s N 執行下N條語句,如果該語句爲函數調用,則進入函數執行第N條語句
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 終止正在調試的程序

二、其他命令

2.1 tui界面

  • 啓動使用設置
gdb -tui test
  • 已經在gdb界面中, ctrl+x, ctrl+a切換tui界面。

  • 界面切換

info win    # 查看當前的focus,有src和cmd兩種
fs next     # 上下切換focus
fs src      # 切換到指定的focus
  • layout切換
# 直接查詢幫助命令
help layout

# layout_name 可以是 src, asm, split, regs
layout prev | next | <layout_name>
  • 線程調試
info threads    # 顯示當前可調試的所有線程,每個線程會有一個GDB爲其分配的ID,後面操作線程的時候會用到這個ID。 前面有*的是當前調試的線程。
thread ID       # 切換當前調試的線程爲指定ID的線程。
break thread_test.c:123 thread all  # 在所有線程中相應的行上設置斷點
thread apply ID1 ID2 command        # 讓一個或者多個線程執行GDB命令command。 
thread apply all command            # 讓所有被調試線程執行GDB命令command。

# 默認值off-->不鎖定任何線程
# on-->只有當前被調試程序會執行
# step 在單步的時候,除了next過一個函數的情況(熟悉情況的人可能知道,這其實是一個設置斷點然後continue的行爲)以外,只有當前線程會執行。
set scheduler-locking off|on|step
# 附着線程
ps -Tef | grep (程序名)  # -T爲顯示所有線程
gdb attach thID         # 附着線程進行調試

三、腳本

待完成

參考

  1. GDB常用命令與技巧(超好用的圖形化gdbgui)
  2. gdb調試腳本
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章