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 : 取消先前設定跟蹤的那些變量。