天天看點

gdb工具常用指令

gdb下調試程式:

編譯時加“-g”,否則無調試資訊

set args 給main函數設定參數值;

show args 啟動後檢視設定的參數

show environment [varname]檢視環境變量([varname]表示可選項,不寫則顯示全部的環境變量)

set environment varname [=] value 修改環境變量

run > outfile 将輸出重定向到檔案

info proc status/all 檢視程式的狀态資訊,包含函數位址,程序号,線程等等

調試多線程:

info threads 列出所有的線程資訊

依次列出的内容為:線程号,線程ID,堆棧資訊,其中"*"所在行為目前gdb所線上程

thread threadno 切換線程

設定斷點:

break(b) linenum  在某行設定斷點

break filename:linenum 在某個檔案某行設定斷點

break function(class::function)在某個函數名(或類裡的方法名)設定斷點,(function表示函數名)

清除斷點:

clear function

clear line (根據斷點行号來清除)

delete line (根據斷點的num來清除,使用info breakpoint可以檢視所有斷點資訊)

delete break (清除所有斷點)

顯示所有的斷點

info breakpoint

執行:

step conut   執行到某行(也可用來進入某個函數内部)

next    按步往下執行

finish  執行完目前函數

檢視堆棧資訊:

backtrace(bt)列印目前函數調用棧的資訊

backtrace n   (n>0)表示隻列印棧頂上n層的調用棧的資訊

(n<0)表示隻列印棧底下n層調用棧的資訊

說明:一般來說,最頂層的棧就是目前棧,0表示棧頂,1就是棧的第二層。如果想看棧下面詳細資訊就切換目前棧。

切換堆棧:

frame n (或f n)切換到某一層堆棧,n是一個從0開始的整數,是棧中的層編号。比如:frame 0,表示棧頂,frame 1,表示棧的第二層。

frame addr(棧位址) 

up n 表示向棧的上面移動n層

down n   表示向棧的下面移動n層 不寫n值,表示移動一層

檢視目前棧的詳細資訊:

frame 或f 會顯示目前函數名,函數參數值,函數所在檔案及行号,函數執行到的語句

info frame(或info f) 會顯示出更為詳細的資訊 

info frame n 顯示某層棧的詳資訊

info args 檢視新參棧資訊

info locals 檢視目前棧變量資訊

檢視源檔案:

list linenum

list function

list first,last

檢視資料:

print varname   列印變量值

print /x varname  按照16進制列印結果

/o 8進制輸出結果

/f float輸出結果

修改運作程式的值

set var varname = value   設定varname的值為value

檢視指令曆史記錄

show history

show commands

gdb基本指令概述:

backtrace(bt): 檢視堆棧情況

finish: 執行完目前函數,等待下個指令

list 行号:列出源代碼

next: 執行下一句語句

print: 列印表達式值

set var: 修改變量的值

start: 開始執行程式,并在main函數的第一個語句等待指令與run不同,run不會等待

step: 執行下一行語句,如果執行函數,那麼跳到函數裡執行

break 行号:設定斷點

continue: 從目前位置開始連續執行,直到遇到斷點停下,否則執行完

disable breakpoint : 禁用所有斷點

enable breakpoint: 啟用所有斷點

display 變量名:跟蹤一個标量,每次停下來都會顯示它的值

undisplay : 取消先前設定跟蹤的那些變量。

繼續閱讀