freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

gdb調(diào)試中文手冊(cè)(編輯修改稿)

2024-12-01 11:30 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 數(shù)名一樣。如: (gdb) b 39。bubble( M? bubble(double,double) bubble(int,int) (gdb) b 39。bubble( 你可以查看到 C++中的所有的重載函數(shù)及參數(shù)。(注: M?和 “按兩次 TAB鍵 ”是一個(gè)意思) 要退出 gdb時(shí),只用發(fā) quit 或命令簡(jiǎn)稱 q 就行了。 【 GDB中運(yùn)行 UNIX的 shell程序】 ———————————— 在 gdb環(huán)境中,你可以執(zhí)行 UNIX的 shell的命令,使用 gdb的 shell命令來完成: shell mand string 調(diào)用 UNIX的 shell來執(zhí)行 mand string,環(huán)境變量 SHELL 中定義的 UNIX的shell將會(huì)被用來執(zhí)行 mand string,如果 SHELL 沒有定義,那就使用 UNIX的標(biāo)準(zhǔn)shell: /bin/sh。(在 Windows 中使用 ) 還有一個(gè) gdb命令是 make: make makeargs 可以在 gdb中執(zhí)行 make 命令來重新 build 自己的程序。這個(gè)命令等價(jià)于 ―shell make makeargs‖。 【在 GDB中運(yùn)行程序】 ———————— 當(dāng)以 gdb program方式啟動(dòng) gdb后, gdb會(huì)在 PATH路徑和當(dāng)前目錄中搜索program的源文件。如要確認(rèn) gdb是否讀到源文件,可使用 l或 list 命令,看看 gdb是否能列出源代碼。 在 gdb中,運(yùn)行程序使用 r 或是 run 命令。程序的運(yùn)行,你有可能需要設(shè)置下面四方面的事。 程序運(yùn)行參數(shù)。 set args 可指定運(yùn)行時(shí)參數(shù)。(如: set args 10 20 30 40 50) 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)境變量。如: set env USER=hchen show environment [varname] 查看環(huán)境變量。 工作目錄。 cd dir 相當(dāng)于 shell的 cd 命令。 pwd 顯示當(dāng)前 的所在目錄。 程序的輸入輸出。 info terminal 顯示你程序用到的終端的模式。 使用重定向控制程序輸出。如: run outfile tty命令可以指寫輸入輸出的終端設(shè)備。如: tty /dev/ttyb 調(diào)試已運(yùn)行的程序 ———————— 兩種方法: 10 在 UNIX下用 ps查看正在運(yùn)行的程序的 PID(進(jìn)程 ID),然后用 gdb program PID格式掛接正在運(yùn)行的程序。 先用 gdb program關(guān)聯(lián)上源代碼,并進(jìn)行 gdb,在 gdb 中用 attach 命令來掛接進(jìn)程的 PID。并用 detach 來取消掛接的進(jìn)程。 暫停 / 恢復(fù)程序運(yùn)行 ————————— 調(diào)試程序中,暫停程序運(yùn)行是必須的, GDB可以方便地暫停程序的運(yùn)行。你可以設(shè)置程序的在哪行停住,在什么條件下停住,在收到什么信號(hào)時(shí)停往等等。以便于你查看運(yùn)行時(shí)的變量,以及運(yùn)行時(shí)的流程。 當(dāng)進(jìn)程被 gdb停住時(shí),你可以使用 info program 來查看程序的是否在運(yùn)行,進(jìn)程號(hào),被暫停的原因。 在 gdb中,我們可以有以下幾種暫停方式:斷點(diǎn)( BreakPoint)、觀察點(diǎn)( WatchPoint)、捕捉點(diǎn)( CatchPoint)、信號(hào)( Signals)、線程停止( Thread Stops)。如果要恢復(fù)程序運(yùn)行,可以使用 c或是 continue 命令。 一、設(shè)置斷點(diǎn)( BreakPoint) 我們用 break命令來設(shè)置斷點(diǎn)。正面有幾點(diǎn)設(shè)置斷點(diǎn)的方法: break function 在進(jìn)入指定函數(shù)時(shí)停住。 C++中可以使用 class::function或function(type,type)格式來指定函數(shù)名。 break linenum 在指定行號(hào)停住。 break +offset break offset 在當(dāng)前行號(hào)的前面或后面的 offset行停住。 offiset為自然數(shù)。 break filename:linenum 在源文件 filename的 linenum行處停住。 break filename:function 在源文件 filename的 function函數(shù)的入口處停住。 break *address 在程序運(yùn)行的內(nèi)存地址處停住。 break break命令沒有 參數(shù)時(shí),表示在下一條指令處停住。 break ... if condition ...可以是上述的參數(shù), condition表示條件,在條件成立時(shí)停住。比如在循環(huán)境體中,可以設(shè)置 break if i=100,表示當(dāng) i為 100時(shí)停住程序。 11 查看斷點(diǎn)時(shí),可使用 info命令,如下所示:(注: n表示斷點(diǎn)號(hào)) info breakpoints [n] info break [n] 二、設(shè)置觀察點(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í),停住程序。 info watchpoints 列出當(dāng)前所設(shè)置了的所有觀察點(diǎn)。 三、設(shè)置捕捉點(diǎn)( CatchPoint) 你可設(shè)置捕捉點(diǎn)來補(bǔ)捉程序運(yùn)行時(shí)的一些事件。如:載入共享庫(kù)(動(dòng)態(tài)鏈接 庫(kù))或是C++的異常。設(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)鍵字,目前此功能只在 HPUX下有用) fork 調(diào)用系統(tǒng)調(diào)用 fork 時(shí)。( fork 為關(guān)鍵字,目前此功能只在 HPUX下有用) vfork 調(diào)用系統(tǒng)調(diào)用 vfork 時(shí)。( vfork為關(guān)鍵字,目前此 功能只在 HPUX下有用) load 或 load libname 載入共享庫(kù)(動(dòng)態(tài)鏈接庫(kù))時(shí)。( load 為關(guān)鍵字,目前此功能只在 HPUX有用) unload 或 unload libname 卸載共享庫(kù)(動(dòng)態(tài)鏈接庫(kù))時(shí)。( unload 為關(guān)鍵字,目前此功能只在 HPUX下有用) tcatch event 只設(shè)置一次捕捉點(diǎn),當(dāng)程序停住以后,應(yīng)點(diǎn)被自動(dòng)刪除。 四、維護(hù)停止點(diǎn) 上面說了如何設(shè)置程序的停止點(diǎn), GDB中的停止點(diǎn)也就是上述的三類。在 GDB中,如果你覺得已定義好的停止點(diǎn)沒有用了 ,你可以使用 delete、 clear、 disable、 enable 這幾個(gè)命令來進(jìn)行維護(hù)。 Clear 清除所有的已定義的停止點(diǎn)。 clear function clear filename:function 清除所有設(shè)置在函數(shù)上的停止點(diǎn)。 12 clear linenum clear filename:linenum 清除所有設(shè)置在指定行上的停止點(diǎn)。 delete [breakpoints] [range...] 刪除指定的斷點(diǎn), breakpoints 為斷點(diǎn)號(hào)。如果不指定斷點(diǎn)號(hào),則表示刪除所有的斷 點(diǎn)。range 表示斷點(diǎn)號(hào)的范圍(如: 37)。其簡(jiǎn)寫命令為 d。 比刪除更好的一種方法是 disable 停止點(diǎn), disable 了的停止點(diǎn), GDB 不會(huì)刪除,當(dāng)你還需要時(shí), enable 即可,就好像回收站一樣。 disable [breakpoints] [range...] disable 所指定的停止點(diǎn), breakpoints 為停止點(diǎn)號(hào)。如果什么都不指定,表示 disable所有的停止點(diǎn)。簡(jiǎn)寫命令是 dis. enable [breakpoints] [range...] enable 所指定的停止點(diǎn), breakpoints為停止點(diǎn)號(hào)。 enable [breakpoints] once range... enable 所指定的停止點(diǎn)一次,當(dāng)程序停止后,該停止點(diǎn)馬上被 GDB自動(dòng) disable。 enable [breakpoints] delete range... enable 所指定的停止點(diǎn)一次,當(dāng)程序停止后,該停止點(diǎn)馬上被 GDB自動(dòng)刪除。 五、停止條件維護(hù) 前面在說到設(shè)置斷點(diǎn)時(shí),我們提到過可以設(shè)置一個(gè)條件,當(dāng)條件成立時(shí),程序自動(dòng)停止,這是一個(gè)非常強(qiáng)大的功能,這里,我想專門說說這個(gè)條件的相關(guān)維護(hù)命令。一般來說,為斷點(diǎn)設(shè) 置一個(gè)條件,我們使用 if 關(guān)鍵詞,后面跟其斷點(diǎn)條件。并且,條件設(shè)置好后,我們可以用 condition 命令來修改斷點(diǎn)的條件。(只有 break 和 watch 命令支持 if, catch 目前暫不支持 if) condition bnum expression 修改斷點(diǎn)號(hào)為 bnum的停止條件為 expression。 condition bnum 清除斷點(diǎn)號(hào)為 bnum的停止條件。 還有一個(gè)比較特殊的維護(hù)命令 ignore,你可以指定程序運(yùn)行時(shí),忽略停止條件幾次。 ignore bnum count 表示忽略 斷點(diǎn)號(hào)為 bnum的停止條件 count 次。 六、為停止點(diǎn)設(shè)定運(yùn)行命令 我們可以使用 GDB 提供的 mand 命令來設(shè)置停止點(diǎn)的運(yùn)行命令。也就是說,當(dāng)運(yùn)行的程序在被停止住時(shí),我們可以讓其自動(dòng)運(yùn)行一些別的命令,這很有利行自動(dòng)化調(diào)試。對(duì)基于 GDB的自動(dòng)化調(diào)試是一個(gè)強(qiáng)大的支持。 mands [bnum] ... mandlist ... End 為斷點(diǎn)號(hào) bnum 指寫一個(gè)命令列表。當(dāng)程序被該斷點(diǎn)停住時(shí), gdb 會(huì)依次運(yùn)行命令列表中的命令。 例如: break foo if x0 13 mands printf x is %d\n,x continue end 斷點(diǎn)設(shè)置在函數(shù) foo 中,斷點(diǎn)條件是 x0,如果程序被斷住后,也就是,一旦 x的值在 foo 函數(shù)中大于 0, GDB會(huì)自動(dòng)打印出 x的值,并繼續(xù)運(yùn)行程序。 如果你要清除斷點(diǎn)上的命令序列,那么只要簡(jiǎn)單的執(zhí)行一下 mands 命令,并直接在打個(gè) end就行了。 七、斷點(diǎn)菜單 在 C++中,可能會(huì)重復(fù)出現(xiàn)同一個(gè)名字的函數(shù)若干次(函數(shù)重載),在這種情況下,break function不能告訴 GDB 要停在哪個(gè)函數(shù)的入口。當(dāng)然,你可以使用 break function(type)也就是把函數(shù)的參數(shù)類型告訴 GDB,以指定一個(gè)函數(shù)。否則的話, GDB會(huì)給你列出一個(gè)斷點(diǎn)菜單供你選擇你所需要的斷點(diǎn)。你只要輸入你菜單列表中的編號(hào)就可以了。如: (gdb) b String::after [0] cancel [1] all [2] file:。 line number:867 [3] file:。 line number:860 [4] file:。 line number:875 [5] file:。 line number:853 [6] file:。 line number:846 [7] file:。 line number:735 2 4 6 Breakpoint 1 at 0xb26c: file , line 867. Breakpoint 2 at 0xb344: file , line 875. Breakpoint 3 at 0xafcc: file , line 846. Multiple breakpoints were set. Use the delete mand to delete unwanted breakpoints. (gdb) 可見, GDB 列出了所有 after 的重載函數(shù),你可以選一下列表編號(hào)就行了。 0 表示放棄設(shè)置斷點(diǎn), 1 表示所有函數(shù)都設(shè)置斷點(diǎn)。 八、恢復(fù)程序運(yùn)行和單步調(diào)試 當(dāng)程序被停住了,你可以用 continue 命令恢復(fù)程序的運(yùn)行直到程序結(jié)束,或下一個(gè)斷點(diǎn)到來。也可以使用 step 或 next 命令單步跟蹤程序。 continue [ignorecount] c [ignorecount] fg [
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1