GDB调试进阶
GDB 調(diào)試
-------------------------------------------------------------------------------
gdb 幫助文檔
help -- 查看 gdb 的命令種類
help <CmdType> -- 查看 CmdType 種類的 gdb 命令
apropos <keyWord> -- 查看關(guān)鍵字 keyWord 的相關(guān)命令
info <keyWord> -- 查看關(guān)鍵字 keyWord 調(diào)試信息
show <keyWord> -- 查看關(guān)鍵字 keyWord gdb 本身設(shè)置信息
gdb 中運(yùn)行 unix 的 shell 程序
shell <command string> -- 調(diào)用 unix 的 shell 來執(zhí)行 <command string>,環(huán)境變量 shell 中定義的 unix 的 shell 將會被用來執(zhí)行 <command string>,如果 shell 沒有定義,那就使用 unix 的標(biāo)準(zhǔn) shell:/bin/sh.(在 windows 中使用 command.com 或 cmd.exe)
make <make-args> -- 等價(jià)于 “shell make <make-args>”
歷史記錄
當(dāng)你用 gdb 的 print 查看程序運(yùn)行時(shí)的數(shù)據(jù)時(shí),你每一個(gè) print 都會被 gdb 記錄下來.gdb 會以 $1, $2, $3 ...這樣的方式為你每一個(gè) print 命令編上號.于是,你可以使用這個(gè)編號訪問以前的表達(dá)式,如 $1.這個(gè)功能所帶來的好處是,如果你先前輸入了一個(gè)比較長的表達(dá)式,如果你還想查看這個(gè)表達(dá)式的值,你可以使用歷史記錄來訪問,省去了重復(fù)輸入.
啟動程序
run <arg ...> -- 啟動程序,<arg ...> 為程序運(yùn)行時(shí)候需要輸入的參數(shù).也可用 set args 命令去設(shè)置運(yùn)行參數(shù).簡寫為 r
--------------------------------------------------------------------------------
GDB 環(huán)境設(shè)置
gdb 設(shè)置
設(shè)置顯示選項(xiàng) 地址 set print address <on/off> -- 打開地址輸出,當(dāng)程序顯示函數(shù)信息時(shí),gdb會顯出函數(shù)的參數(shù)地址.系統(tǒng)默認(rèn)為打開.
show print address -- 查看 print address 選項(xiàng)信息
數(shù)組元素單獨(dú)行顯示 set print array <on/off> -- 打開時(shí)數(shù)組顯示時(shí),每個(gè)元素占一行,如果不打開的話,每個(gè)元素則以逗號分隔.這個(gè)選項(xiàng)默認(rèn)是關(guān)閉的.
show print array -- 查看 print array 選項(xiàng)信息
顯示數(shù)組元素顯示 set print elements <number-of-elements> -- 設(shè)置數(shù)組的顯示的最大長度,設(shè)置為 0,則表示不限制.
show print elements -- 查看 print elements 選項(xiàng)信息.
設(shè)置字符串顯示 set print null-stop <on/off> -- 如果打開那么當(dāng)顯示字符串時(shí),遇到結(jié)束符則停止顯示.這個(gè)選項(xiàng)默認(rèn)為 off.
show print null-stop -- 查看 print null-stop 選項(xiàng)信息
設(shè)置結(jié)構(gòu)體變量顯示 set print pretty <on/off> -- 結(jié)構(gòu)體優(yōu)雅顯示
show print pretty -- 查看 gdb 是如何顯示結(jié)構(gòu)體的.
設(shè)置字符顯示 set print sevenbit-strings <on/off> -- 符顯示,是否按“/nnn”的格式顯示,如果打開,則字符串或字符數(shù)據(jù)按/nnn顯示,如“/065”.
show print sevenbit-strings -- 查看字符顯示開關(guān)是否打開.
設(shè)置聯(lián)合體顯示 set print union <on/off> -- 設(shè)置顯示結(jié)構(gòu)體時(shí),是否顯式其內(nèi)的聯(lián)合體數(shù)據(jù).
show print union -- 查看聯(lián)合體數(shù)據(jù)的顯示方式
設(shè)置對象顯示 set print object <on/off> -- 在 C++ 中,如果一個(gè)對象指針指向其派生類,如果打開這個(gè)選項(xiàng),gdb 會自動按照虛方法調(diào)用的規(guī)則顯示輸出,如果關(guān)閉這個(gè)選項(xiàng)的話,gdb 就不管虛函數(shù)表了.這個(gè)選項(xiàng)默認(rèn)是 off.
show print object -- 查看對象選項(xiàng)的設(shè)置.
設(shè)置靜態(tài)成員顯示 set print static-members <on/off> -- 這個(gè)選項(xiàng)表示,當(dāng)顯示一個(gè) C++ 對象中的內(nèi)容是,是否顯示其中的靜態(tài)數(shù)據(jù)成員.默認(rèn)是 on.
show print static-members -- 查看靜態(tài)數(shù)據(jù)成員選項(xiàng)設(shè)置.
設(shè)置虛函數(shù)表顯示 set print vtbl <on/off> -- 當(dāng)此選項(xiàng)打開時(shí),gdb 將用比較規(guī)整的格式來顯示虛函數(shù)表時(shí).其默認(rèn)是關(guān)閉的.
show print vtbl -- 查看虛函數(shù)顯示格式的選項(xiàng).
設(shè)置運(yùn)行程序的相關(guān)環(huán)境及其參數(shù) 指定源文件的路徑 directory <dirname ... > -- 加一個(gè)源文件路徑到當(dāng)前路徑的前面.如果你要指定多個(gè)路徑,UNIX 下你可以使用“:”,Windows 下你可以使用“;”.縮寫 dir
directory -- 清除所有的自定義的源文件搜索路徑信息.
show directories -- 顯示定義了的源文件搜索路徑.
運(yùn)行參數(shù) set args -- 可指定運(yùn)行時(shí)參數(shù)
show args -- 命令可以查看設(shè)置好的運(yùn)行參數(shù)
運(yùn)行環(huán)境 path <dir> -- 可設(shè)定程序的運(yùn)行路徑
show paths -- 查看程序的運(yùn)行路徑
set environment varname=value -- 設(shè)置環(huán)境變量
show environment [varname] -- 查看環(huán)境變量
工作目錄 cd <dir> -- 相當(dāng)于shell的cd命令
pwd -- 顯示當(dāng)前的所在目錄
程序的輸入輸出 info terminal -- 顯示你程序用到的終端的模式
tty -- 命令可以指寫輸入輸出的終端設(shè)備
重定向控制程序輸出
堆棧幀設(shè)置 set backtrace <limit> -- 設(shè)置堆棧幀的最大顯示數(shù)量,默認(rèn)是沒有限制
調(diào)試模式 set step-mode [on | off] -- step-mode 模式,于是,在進(jìn)行單步跟蹤時(shí),程序不會因?yàn)闆]有debug信息而不停住.這個(gè)參數(shù)有很利于查看機(jī)器碼.
--------------------------------------------------------------------------------
GDB 源碼查看
顯示源代碼
list <linenum> -- 顯示程序第 linenum 行的周圍的源程序.
list <function> -- 顯示函數(shù)名為 function 的函數(shù)的源程序.
list <filename:linenum> -- 哪個(gè)文件的哪一行.
list <filename:function> -- 哪個(gè)文件中的哪個(gè)函數(shù).
list <offset> -- 當(dāng)前行號的正/負(fù) offset 偏移量那那行.
list -- 顯示當(dāng)前行后面的源程序.
list - -- 顯示當(dāng)前行前面的源程序.
list <first>, <last> -- 顯示從 first 行到 last 行之間的源代碼.若無 first 則顯示從當(dāng)前行到 last 之間的源代碼.
設(shè)置和獲得顯示源碼的行數(shù)
set listsize <count> -- 設(shè)置一次顯示源代碼的行數(shù).
show listsize -- 查看當(dāng)前l(fā)istsize的設(shè)置.
搜索源代碼
forward-search <regexp> -- 向后面搜索.正則表達(dá)式為 regexp 的關(guān)鍵字
search <regexp> -- 向后面搜索.正則表達(dá)式為 regexp 的關(guān)鍵字
reverse-search <regexp> -- 向前面搜索.正則表達(dá)式為 regexp 的關(guān)鍵字
源代碼的內(nèi)存
info line <linenum> -- 查看行號為 linenum 源代碼在內(nèi)存中的地址.
info line <function> -- 查看函數(shù)在源代碼在內(nèi)存中的地址.
info line <filename:linenum> -- 查看 filename 文件的第 linenum 行源代碼在內(nèi)存中的地址.
info line <filename:function> -- 查看 filename 文件的 function 函數(shù)在源代碼在內(nèi)存中的地址.
查看匯編代碼
disassemble -- 查看源程序的當(dāng)前執(zhí)行時(shí)的機(jī)器碼,這個(gè)命令會把目前內(nèi)存中的指令 dump 出來.
--------------------------------------------------------------------------------
GDB 停止點(diǎn)設(shè)置及維護(hù)
斷點(diǎn)(BreakPoint)
設(shè)置斷點(diǎn):(threadno 指定了線程的 ID,注意,這個(gè) ID 是 gdb 分配的,可以通過 "info threads" 命令來查看正在運(yùn)行程序中的線程信息) break thread <threadno> -- break命令沒有參數(shù)時(shí),表示在下一條指令處停住.
break +offset thread <threadno> -- 在當(dāng)前行號的后面的 offset 行停住.(offiset 為自然數(shù))
break -offset thread <threadno> -- 在當(dāng)前行號的前面的 offset 行停住.(offiset 為自然數(shù))
break <linenum> thread <threadno> -- 在指定行號停住.
break filename:linenum thread <threadno> -- 在源文件filename的linenum行處停住.
break <function> thread <threadno> -- 在進(jìn)入指定函數(shù)時(shí)停住.
break filename:function thread <threadno> --在源文件filename的function函數(shù)的入口處停住.
break *address -- 在程序運(yùn)行的內(nèi)存地址處停住.
break ... thread <threadno> if <condition> -- ...可以是上述的參數(shù),condition表示條件,在條件成立時(shí)停住.比如在循環(huán)境體中,可以設(shè)置break if i=100,表示當(dāng)i為100時(shí)停住程序.
tbreak -- 設(shè)置只停止一次的斷點(diǎn).用法和 break 類似
查看斷點(diǎn) info breakpoints [n]
info break [n]
觀察點(diǎn)(WatchPoint) -- 觀察點(diǎn)一般來觀察某個(gè)表達(dá)式(變量也是一種表達(dá)式)的值是否有變化了,如果有變化,馬上停住程序.
設(shè)在觀察點(diǎn) watch <expr> -- 為表達(dá)式(變量)expr設(shè)置一個(gè)觀察點(diǎn).一量表達(dá)式值有變化時(shí),馬上停住程序.
rwatch <expr> -- 當(dāng)表達(dá)式(變量)expr被讀時(shí),停住程序.
awatch <expr> -- 當(dāng)表達(dá)式(變量)的值被讀或被寫時(shí),停住程序.
查看觀察點(diǎn) info watchpoints -- 列出當(dāng)前所設(shè)置了的所有觀察點(diǎn).
捕捉點(diǎn)(CatchPoint) -- 設(shè)置捕捉點(diǎn)來補(bǔ)捉程序運(yùn)行時(shí)的一些事件.如:載入共享庫(動態(tài)鏈接庫)或是 C++ 的異?!?p>
設(shè)置捕捉點(diǎn) catch <event> -- 當(dāng)event發(fā)生時(shí),停住程序.event可以是下面的內(nèi)容: throw 一個(gè) C++ 拋出的異常.(throw 為關(guān)鍵字)
catch 一個(gè) C++ 捕捉到的異常.(catch 為關(guān)鍵字)
exec 調(diào)用系統(tǒng)調(diào)用 exec 時(shí).(exec 為關(guān)鍵字,目前此功能只在 HP-UX 下有用)
fork 調(diào)用系統(tǒng)調(diào)用 fork 時(shí).(fork 為關(guān)鍵字,目前此功能只在 HP-UX 下有用)
vfork 調(diào)用系統(tǒng)調(diào)用 vfork 時(shí).(vfork 為關(guān)鍵字,目前此功能只在 HP-UX 下有用)
load 或 load <libname> 載入共享庫(動態(tài)鏈接庫)時(shí).(load 為關(guān)鍵字,目前此功能只在 HP-UX 下有用)
unload 或 unload <libname> 卸載共享庫(動態(tài)鏈接庫)時(shí).(unload 為關(guān)鍵字,目前此功能只在 HP-UX 下有用)
tcatch <event> -- 只設(shè)置一次捕捉點(diǎn),當(dāng)程序停住以后,應(yīng)點(diǎn)被自動刪除.
維護(hù)停止點(diǎn)
清除停止點(diǎn) clear -- 所有的已定義的停止點(diǎn).
clear <function> -- 清除所有設(shè)置在函數(shù)上的停止點(diǎn).
clear <filename:function> -- 清除所有設(shè)置在函數(shù)上的停止點(diǎn).
clear <linenum> -- 清除所有設(shè)置在指定行上的停止點(diǎn).
clear <filename:linenum> -- 清除所有設(shè)置在指定行上的停止點(diǎn).
刪除停止點(diǎn) delete [range] -- 刪除停止點(diǎn).其簡寫命令為 d.
禁用停止點(diǎn) disable [range] -- 禁用停止點(diǎn)
啟用停止點(diǎn) enable [range] -- 啟用停止點(diǎn).
enable once [rang] -- 啟用停止點(diǎn)一次,當(dāng)程序停止后,該停止點(diǎn)馬上被 gdb 自動 disable.
enable count [rang] -- 啟用停止點(diǎn) count 次,當(dāng)程序停止后,該停止點(diǎn)馬上被 gdb 自動 disable.
enable delete [rang] -- 啟用停止點(diǎn)一次,當(dāng)程序停止后,該停止點(diǎn)馬上被 gdb 自動刪除.
停止條件維護(hù) -- 以用 condition 命令來修改斷點(diǎn)的條件.(只有break和watch命令支持if,catch目前暫不支持if) condition <bnum> <expression> -- 修改斷點(diǎn)號為bnum的停止條件為expression.
condition <bnum> -- 清除斷點(diǎn)號為bnum的停止條件.
忽略停止點(diǎn) N 次 ignore <bnum> <count> -- 表示忽略斷點(diǎn)號為 bnum 的停止條件 count 次.
為停止點(diǎn)設(shè)定運(yùn)行命令 格式:
commands [bnum]
?????? ... command-list ...
?????? // 為斷點(diǎn)號 bnumi寫一個(gè)命令列表.當(dāng)程序被該斷點(diǎn)停住時(shí),gdb 依次運(yùn)行命令列表中的命令.
end
例如:
break foo if x>0
commands
?????? printf "x is %d/n",x
?????? continue
end
--------------------------------------------------------------------------------
信號(Signals)
添加信號處理
handle <signal> <keywords...>
在 gdb 中定義一個(gè)信號處理.信號 <signal> 可以以 SIG 開頭或不以 SIG 開頭,可以用定義一個(gè)要處理信號的范圍(如:SIGIO-SIGKILL,表示處理從 SIGIO 信號到 SIGKILL 的信號,其中包括 SIGIO, SIGIOT, SIGKILL 三個(gè)信號),也可以使用關(guān)鍵字 all 來標(biāo)明要處理所有的信號.一旦被調(diào)試的程序接收到信號,運(yùn)行程序馬上會被 gdb 停住,以供調(diào)試.其 <keywords> 可以是以下幾種關(guān)鍵字的一個(gè)或多個(gè).若沒有 keywords 則查看奇信號的處理狀態(tài) nostop -- 當(dāng)被調(diào)試的程序收到信號時(shí),gdb 不會停住程序的運(yùn)行,但會打出消息告訴你收到這種信號.
stop -- 當(dāng)被調(diào)試的程序收到信號時(shí),gdb 會停住你的程序.
print -- 當(dāng)被調(diào)試的程序收到信號時(shí),gdb 會顯示出一條信息.
noprint -- 當(dāng)被調(diào)試的程序收到信號時(shí),gdb 不會告訴你收到信號的信息.
pass -- 當(dāng)被調(diào)試的程序收到信號時(shí),gdb 不處理信號.這表示,gdb 會把這個(gè)信號交給被調(diào)試程序會處理.
noignore -- 當(dāng)被調(diào)試的程序收到信號時(shí),gdb 不處理信號.這表示,gdb 會把這個(gè)信號交給被調(diào)試程序會處理.
nopass -- 當(dāng)被調(diào)試的程序收到信號時(shí),gdb 不處理信號.這表示,gdb 會把這個(gè)信號交給被調(diào)試程序會處理.
1gnore -- 當(dāng)被調(diào)試的程序收到信號時(shí),gdb 不會讓被調(diào)試程序來處理這個(gè)信號.
查看處理信號
info signals -- 查看有哪些信號在被 gdb 檢測中.
info handle -- 查看有哪些信號在被 gdb 檢測中.
--------------------------------------------------------------------------------
GDB 程序調(diào)試
恢復(fù)執(zhí)行
continue [ignore-count] -- ignore-count 表示忽略其后的斷點(diǎn)次數(shù).恢復(fù)程序運(yùn)行,直到程序結(jié)束,或是下一個(gè)斷點(diǎn)到來.縮寫 c
fg [ignore-count] -- ignore-count 表示忽略其后的斷點(diǎn)次數(shù).恢復(fù)程序運(yùn)行,直到程序結(jié)束,或是下一個(gè)斷點(diǎn)到來.縮寫 c
單步調(diào)試
step <count> -- 單步跟蹤,如果有函數(shù)調(diào)用,它會進(jìn)入該函數(shù).count 表示執(zhí)行后面 count 條語句,不加則默認(rèn)為 1.
next <count> -- 同樣單步跟蹤,如果有函數(shù)調(diào)用,他不會進(jìn)入該函數(shù).count 表示執(zhí)行后面 count 條語句,不加則默認(rèn)為 1.
跟蹤機(jī)器指令
?????? 與之一樣有相同功能的命令是 “display/i $pc” ,當(dāng)運(yùn)行完這個(gè)命令后,單步跟蹤會在打出程序代碼的同時(shí)打出機(jī)器指令(也就是匯編代碼)
stepi 或 si -- 單步跟蹤一條機(jī)器指令,簡寫 si
nexti 或 ni -- 單步跟蹤一條機(jī)器指令,簡寫 ni
函數(shù)調(diào)試
finish -- 運(yùn)行程序,直到當(dāng)前函數(shù)完成返回.并打印函數(shù)返回時(shí)的堆棧地址和返回值及參數(shù)值等信息.
return <expression> -- 使函數(shù)以 expression 表達(dá)式返回出去,忽略還沒有執(zhí)行的語句.若無返回 void 出去
call <expr> -- 表達(dá)式中可以一是函數(shù),以此達(dá)到強(qiáng)制調(diào)用函數(shù)的目的.并顯示函數(shù)的返回值,如果函數(shù)返回值是void,那么就不顯示.
print 與 printf 也可以做到類似的功能和 call 的不同是,如果函數(shù)返回 void,call 則不顯示,print 則顯示函數(shù)返回值,并把該值存入歷史數(shù)據(jù)中.
循環(huán)體調(diào)試
until -- 可以運(yùn)行程序直到退出循環(huán)體.簡寫 u
修改變量值
print varname=var -- 修改被調(diào)試程序運(yùn)行時(shí)的變量值
set var varname=value -- 修改被調(diào)試程序運(yùn)行時(shí)的變變量
whatis varname -- 查看變量的類型
跳轉(zhuǎn)執(zhí)行
jump <linespec> -- 指定下一條語句的運(yùn)行點(diǎn).<linespce> 可以是文件的行號,可以是 file:line 格式,可以是 +num 這種偏移量格式.表式著下一條運(yùn)行語句從哪里開始.
jump <address> -- 跳轉(zhuǎn)到指定的程序內(nèi)存地址運(yùn)行.<address> 是代碼行的內(nèi)存地址.
注意 jump 指令不會改變當(dāng)前的程序棧中的內(nèi)容,所以,當(dāng)你從一個(gè)函數(shù)跳到另一個(gè)函數(shù)時(shí),當(dāng)函數(shù)運(yùn)行完返回時(shí)進(jìn)行彈棧操作時(shí)必然會發(fā)生錯(cuò)誤.
jump 命令只是改變了指令寄存器中的值.于是可以使用 “set $pc” 來更改跳轉(zhuǎn)執(zhí)行的地址.如: set $pc = 0x485
產(chǎn)生信號量
signal <signal> -- 產(chǎn)生一個(gè) signal 信號.UNIX 的系統(tǒng)信號量通常從 1 到 15.所以 <signal> 取值也在這個(gè)范圍.
--------------------------------------------------------------------------------
GDB 運(yùn)行是數(shù)據(jù)
查看運(yùn)行時(shí)數(shù)據(jù)
print /<f> <expr> -- 查看當(dāng)前程序的運(yùn)行數(shù)據(jù).簡寫 p. <expr> 是表達(dá)式 @ -- 是一個(gè)和數(shù)組有關(guān)的操作符,在后面會有更詳細(xì)的說明.在 @ 左邊是數(shù)組的地址,右邊是數(shù)組的長度,eg: array@len
:: -- 指定一個(gè)在文件或是一個(gè)函數(shù)中的變量.
{<type>} <addr> --表示一個(gè)指向內(nèi)存地址<addr>的類型為type的一個(gè)對象.
<f>是輸出的格式 d -- 按十進(jìn)制格式顯示變量.
u -- 按十六進(jìn)制格式顯示無符號整型.
o -- 按八進(jìn)制格式顯示變量.
t -- 按二進(jìn)制格式顯示變量.
a -- 按十六進(jìn)制格式顯示變量.
c -- 按字符格式顯示變量.
f -- 按浮點(diǎn)數(shù)格式顯示變量.
注意: 1.若出現(xiàn)變量重名,局部變量會隱藏全局變量.若想查看全局變量的值時(shí),可以使用“::”操作符.
2.可以通過這種形式指定你所想查看的變量 eg:
??? *'filename'::variable
??? *function::variable
printf "fmt",arg,... -- 打印格式化字符燦 fmt.
查看內(nèi)存
examine/<n/f/u> <addr> -- 來查看內(nèi)存地址中的值.簡寫 x <n/f/u> n 是一個(gè)正整數(shù),表示顯示內(nèi)存的長度,也就是說從當(dāng)前地址向后顯示幾個(gè)地址的內(nèi)容.
f 表示顯示的格式 s -- 按字符串格式顯示內(nèi)存地址內(nèi)容.
i -- 查看內(nèi)存地址的機(jī)器指令內(nèi)容
x -- 按十六進(jìn)制格式顯示地址內(nèi)容.
d -- 按十進(jìn)制格式顯示地址內(nèi)容.
u -- 按十六進(jìn)制格式顯示無符號整型.
o -- 按八進(jìn)制格式顯示地址內(nèi)容.
t -- 按二進(jìn)制格式顯示地址內(nèi)容.
a -- 按十六進(jìn)制格式顯示地址內(nèi)容.
c -- 按字符格式顯示地址內(nèi)容.
f -- 按浮點(diǎn)數(shù)格式顯示地址內(nèi)容.
u 表示從當(dāng)前地址往后請求的字節(jié)數(shù),如果不指定的話,gdb默認(rèn)是 4 個(gè) bytes. b -- 表示單字節(jié)
h -- 表示雙字節(jié)
w -- 表示四字節(jié)
g -- 表示八字節(jié)
<addr> 表示一個(gè)內(nèi)存地址.
自動顯示
設(shè)置自動顯示 display/<fmt> <expr> -- 自動顯示 expr 表達(dá)式
display/<fmt> <addr> -- 自動顯示 addr 地址 fmt 表示顯示的格式
i -- 輸出格式為機(jī)器指令碼,也就是匯編.
s -- 輸出格式為字符串
刪除自動顯示 undisplay <range> -- 刪除自動顯示
delete display <range> -- 刪除自動顯示
啟用和禁自動顯示 sable display <range> -- 禁用自動顯示
enable display <range> -- 啟動自動顯示
查看棧信息
backtrace <n> -- 擦看函數(shù)棧信息,簡寫 bt n 若是正數(shù),只打印棧頂上 n 層的棧信息,
若是負(fù)數(shù),只打印棧頂下 n 層的棧信息,
若無則打印當(dāng)前的函數(shù)調(diào)用棧的所有信息
frame -- 會打印出這些信息:棧的層編號,當(dāng)前的函數(shù)名,函數(shù)參數(shù)值,函數(shù)所在文件及行號,函數(shù)執(zhí)行到的語句.
info frame -- 這個(gè)命令會打印出更為詳細(xì)的當(dāng)前棧層的信息,只不過,大多數(shù)都是運(yùn)行時(shí)的內(nèi)內(nèi)地址.
info args -- 打印出當(dāng)前函數(shù)的參數(shù)名及其值.
info locals -- 打印出當(dāng)前函數(shù)中所有局部變量及其值.
info catch -- 打印出當(dāng)前的函數(shù)中的異常處理信息.
切換函數(shù)棧位置
frame <n> -- 切換到第 n 層函數(shù)棧位置,簡寫 f.
p <n> -- 表示上面移動 n 層,可以不打 n,表示向上移動一層.
down <n> -- 表示向棧的下面移動 n 層,可以不打 n,表示向下移動一層.
select-frame <n> -- 類似 frame 命令.不打印出棧層信息.
up-silently <n> -- 類似 up 命令.不打印出棧層信息.
down-silently <n> -- 類似 down 命令.不打印出棧層信息.
查看寄存器
info registers -- 查看寄存器的情況.(除了浮點(diǎn)寄存器)
info all-registers -- 查看所有寄存器的情況.(包括浮點(diǎn)寄存器)
info registers <regname> -- 查看所指定的寄存器的情況.
線程查看與切換線程
info threads -- 查看當(dāng)前線程
thread <threadno> -- 切換到 threadno 的線程,簡寫 t
--------------------------------------------------------------------------------
自定義命令
定義一個(gè)命令
格式
define comdName
????? ...
end
條件語句
if cond_expr
????? ...
else
????? ...
end
循環(huán)語句
while cond_expr
????? ...
end
定義一個(gè)命令的文檔信息(在 help cmdName 的時(shí)候顯示)
document cmdName
????? ...
end
查看自定命令
help user-define -- 查看所有用戶自定義的命令
show user cmdName -- 查看用戶定義的 cmdName 的命令.
help cmdName -- 查看用戶自定義的 cmdName 的幫助文檔
show max-user-call-depth -- 查看用戶自定義命令的遞歸最大深度,缺省是 1024
set-user-call-depth <limit>-- 設(shè)置用戶自定義命令的遞歸最大深度.
?
轉(zhuǎn)載于:https://www.cnblogs.com/xfei-zhang/p/5086860.html
總結(jié)
- 上一篇: 学电影有没有前途
- 下一篇: 求一个拒绝所有暧昧个性签名。