天天看點

gdb參考指令

1、啟動

1)程式的運作參數。

set args //指定運作時參數。(如:set args 10 20 30 )

show args //檢視設定好的運作參數。

2)運作環境

path //設定程式的運作路徑。

show paths //檢視程式的運作路徑。

set environment varname[=value] //設定環境變量。如:set env USER=hchen

show environment [varname] //檢視環境變量

3)工作目錄

cd //相當于shell的cd指令。

pwd //顯示目前的工作目錄。

4)程式的輸入輸出

info terminal//顯示程式用到的終端的模式

使用重定向空值程式輸出。如run<outfile

tty指令可以指定寫輸入輸出的終端裝置。如tty/dev/ttyb

2、斷點

(gdb)bmake_< TAB>  // 支援聯想功能

break

break +offset

break -offset

break filename:linenum

break filename:function

break if 

break xx thread

disable 5-8

enable

info break

delete [breakpoints] [range…]

watch //資料斷點,表達式可以是一個變量或位址

3、運作

c/continue  //恢複程式的運作直到程式結束,或下一個斷點的到來。

s/step //單步跟蹤,如果有函數調用,他會進入該函數

n/next  //同樣單步跟蹤,如果有函數調用,他不會進入函數。

finish //運作程式,直到目前函數完成傳回。

return //使用return指令取消目前函數的執行,并立即傳回

4、堆棧資訊

bt/backtrace //n是一個正整數,表示隻列印棧頂上n層的棧資訊。

f/frame //切換目前的棧

select-frame 對應于frame 指令。

up-silently 對應于up指令。

down-silently 對應于down指令。

info frame //列印出更為詳細的目前棧層的資訊

info args //列印出目前函數的參數名及其值。

info locals //列印出目前函數中所有局部變量及其值。

list //顯示程式第linenum行周圍的源程式。

list 1,20   //檢視1到20行的代碼

list //顯示函數名為function的函數的源程式。

list //顯示目前行後面的源程式。

5、變量

print/p //expr可以為變量或位址

--file:variable

--function::variable

int *array=(int*)malloc(len*sizeof(int))

print x=4

set var width=47 //set用于修改gdb參數,建議帶上var

6、自動顯示

設定一些自動顯示的變量,當程式停住時,或是在你單步跟蹤時,這些變量會自動顯示

display 

undisplay 

delete display 

disable display 

enable display 

info display

7、condition

condition 

修改斷點号為bnum的停止條件為expression

清除斷點号為bnum的停止條件。

還有一個比較特殊的維護指令ignore,可以指定程式運作時,忽略停止條件幾次。

ignore 

表示忽略斷點号為bnum的停止條件count次。

8、多線程

(gdb)set scheduler-locking on/off //鎖定排程器來避開gdb根據優先權來改變目前線程

(gdb)show scheduler-locking  //确定目前模式

(gdb)set follow-fork-mode child //跟蹤子程序

(gdb)set follow-fork-mode parent //跟蹤父程序

(gdb)set follow-fork-mode ask //設定gdb在fork時詢問跟蹤哪一個程序

info threads  //檢視目前應用程式中所有的線程