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

正文內(nèi)容

gdb使用手冊-預(yù)覽頁

2025-07-20 08:43 上一頁面

下一頁面
 

【正文】 n20 result += i。(gdb) n6 for(i=1。(gdb) n6 for(i=1。 i=n。Value returned is $6 = 31375(gdb) c 繼續(xù)運(yùn)行。hchen/test好了,有了以上的感性認(rèn)識,還是讓我們來系統(tǒng)地認(rèn)識一下gdb吧。如: cc g o hello g++ g o hello如果沒有g(shù),你將看不見程序的函數(shù)名、變量名,所代替的全是運(yùn)行時的內(nèi)存地址。gdb 如果你的程序是一個服務(wù)程序,那么你可以指定這個服務(wù)程序運(yùn)行時的進(jìn)程ID。我在下面只例舉一些比較常用的參數(shù):symbols s 從指定文件中讀取符號表。默認(rèn)搜索路徑是環(huán)境變量中PATH所定義的路徑。gdb中,輸入命令時,可以不用打全命令,只用打命令的前幾個字符就可以了,當(dāng)然,命令的前幾個字符應(yīng)該要標(biāo)志著一個唯一的命令,在Linux下,你可以敲擊兩次TAB鍵來補(bǔ)齊命令的全稱,如果有重復(fù)的,那么gdb會把其例出來。如:(gdb) b 39。GDB中運(yùn)行UNIX的shell程序————————————在gdb環(huán)境中,你可以執(zhí)行UNIX的shell的命令,使用gdb的shell命令來完成:shell 調(diào)用UNIX的shell來執(zhí)行,環(huán)境變量SHELL中定義的UNIX的shell將會被用來執(zhí)行,如果SHELL沒有定義,那就使用UNIX的標(biāo)準(zhǔn)shell:/bin/sh。如要確認(rèn)gdb是否讀到源文件,可使用l或list命令,看看gdb是否能列出源代碼。set args 可指定運(yùn)行時參數(shù)。show paths 查看程序的運(yùn)行路徑。cd 相當(dāng)于shell的cd命令。使用重定向控制程序輸出。并用detach來取消掛接的進(jìn)程。當(dāng)進(jìn)程被gdb停住時,你可以使用info program 來查看程序的是否在運(yùn)行,進(jìn)程號,被暫停的原因。正面有幾點(diǎn)設(shè)置斷點(diǎn)的方法:break 在進(jìn)入指定函數(shù)時停住。offiset為自然數(shù)。break break命令沒有參數(shù)時,表示在下一條指令處停住。我們有下面的幾種方法來設(shè)置觀察點(diǎn):watch 為表達(dá)式(變量)expr設(shè)置一個觀察點(diǎn)。info watchpoints列出當(dāng)前所設(shè)置了的所有觀察點(diǎn)。event可以是下面的內(nèi)容:throw 一個C++拋出的異常。(fork為關(guān)鍵字,目前此功能只在HPUX下有用)vfork 調(diào)用系統(tǒng)調(diào)用vfork時。四、維護(hù)停止點(diǎn)上面說了如何設(shè)置程序的停止點(diǎn),GDB中的停止點(diǎn)也就是上述的三類。clear clear 清除所有設(shè)置在指定行上的停止點(diǎn)。其簡寫命令為d。簡寫命令是dis.enable [breakpoints] [range...]enable所指定的停止點(diǎn),breakpoints為停止點(diǎn)號。一般來說,為斷點(diǎn)設(shè)置一個條件,我們使用if關(guān)鍵詞,后面跟其斷點(diǎn)條件。還有一個比較特殊的維護(hù)命令ignore,你可以指定程序運(yùn)行時,忽略停止條件幾次。對基于GDB的自動化調(diào)試是一個強(qiáng)大的支持。如果你要清除斷點(diǎn)上的命令序列,那么只要簡單的執(zhí)行一下mands命令,并直接在打個end就行了。你只要輸入你菜單列表中的編號就可以了。 line number:875[5] file:。0表示放棄設(shè)置斷點(diǎn),1表示所有函數(shù)都設(shè)置斷點(diǎn)。ignorecount表示忽略其后的斷點(diǎn)次數(shù)。很像VC等工具中的step in。后面可以加count也可以不加,不加表示一條條地執(zhí)行,加表示執(zhí)行后面的count條指令,然后再停住。finish運(yùn)行程序,直到當(dāng)前函數(shù)完成返回。與之一樣有相同功能的命令是 “display/i $pc” ,當(dāng)運(yùn)行完這個命令后,單步跟蹤會在打出程序代碼的同時打出機(jī)器指令(也就是匯編代碼)九、信號(Signals)信號是一種軟中斷,是一種處理異步事件的方法。信號量編程是UNIX下非常重要的一種技術(shù)。handle 在GDB中定義一個信號處理。nostop當(dāng)被調(diào)試的程序收到信號時,GDB不會停住程序的運(yùn)行,但會打出消息告訴你收到這種信號。passnoignore當(dāng)被調(diào)試的程序收到信號時,GDB不處理信號。十、線程(Thread Stops)如果你程序是多線程的話,你可以定義你的斷點(diǎn)是否在所有的線程上,或是在某個特定的線程。如果你不指定thread 則表示你的斷點(diǎn)設(shè)在所有線程上面。而在你恢復(fù)程序運(yùn)行時,所有的線程也會被恢復(fù)運(yùn)行。你可以用GDB命令來查看當(dāng)前的棧中的信息。如果你要查看某一層的信息,你需要在切換當(dāng)前的棧,一般來說,程序停止時,最頂層的棧就是當(dāng)前棧,如果你要查看棧下面層的詳細(xì)信息,首先要做的是切換當(dāng)前棧。 down 表示向棧的下面移動n層,可以不打n,表示向下移動一層。upsilently 對應(yīng)于 up 命令。比如:函數(shù)地址,調(diào)用函數(shù)的地址,被調(diào)用函數(shù)的地址,目前的函數(shù)是由什么樣的程序語言寫成的、函數(shù)參數(shù)地址及值、局部變量的地址等等。info locals打印出當(dāng)前函數(shù)中所有局部變量及其值。當(dāng)程序停下來以后, GDB會報(bào)告程序停在了那個文件的第幾行上。list 顯示函數(shù)名為function的函數(shù)的源程序。set listsize 設(shè)置一次顯示源代碼的行數(shù)。list +往后顯示源代碼。哪個文件的哪一行。二、搜索源代碼不僅如此,GDB還提供了源代碼搜索的命令:forwardsearch search 向前面搜索。GDB提供了可以讓你指定源文件的路徑的命令,以便GDB進(jìn)行搜索。directory 清除所有的自定義的源文件搜索路徑信息。如下面的示例表示查看函數(shù)func的匯編代碼。可惜的是GDB不能使用你在程序中所定義的宏。::指定一個在文件或是一個函數(shù)中的變量。例如,:gdb) p 39。這個是很正常的,因?yàn)閮?yōu)化程序會刪改你的程序,整理你程序的語句順序,剔除一些無意義的變量等,所以在GDB調(diào)試這種程序時,運(yùn)行時的指令和你所編寫指令就有不一樣,也就會出現(xiàn)你所想象不到的結(jié)果。三、數(shù)組有時候,你需要查看一段連續(xù)的內(nèi)存空間的值。于是,在GDB調(diào)試過程中,你可以以如下命令顯示出這個動態(tài)數(shù)組的取值:p *arraylen的左邊是數(shù)組的首地址的值,也就是變量array所指向的內(nèi)容,右邊則是數(shù)據(jù)的長度,其保存在變量len中,其輸出結(jié)果,大約是下面這個樣子的:(gdb) p *arraylen$1 = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40}如果是靜態(tài)數(shù)組的話,可以直接用print數(shù)組名,就可以顯示數(shù)組中所有數(shù)據(jù)的內(nèi)容了。要做到這樣,你可以使用GDB的數(shù)據(jù)顯示格式:x 按十六進(jìn)制格式顯示變量。t 按二進(jìn)制格式顯示變量。(gdb) p i$21 = 101 (gdb) p/a i$22 = 0x65(gdb) p/c i$23 = 101 39。n 是一個正整數(shù),表示顯示內(nèi)存的長度,也就是說從當(dāng)前地址向后顯示幾個地址的內(nèi)容。u參數(shù)可以用下面的字符來代替,b表示單字節(jié),h表示雙字節(jié),w表示四字節(jié),g表示八字節(jié)。例如:命令:x/3uh 0x54320 表示,從內(nèi)存地址0x54320讀取內(nèi)容,h表示以雙字節(jié)為一個單位,3表示三個單位,u表示按十六進(jìn)制顯示。格式i和s同樣被display支持,一個非常有用的命令是:display/i $pc$pc是GDB的環(huán)境變量,表示著指令的地址,/i則表示輸出格式為機(jī)器指令碼,也就是匯編。info display查看display設(shè)置的自動顯示的信息。系統(tǒng)默認(rèn)為打開的,如:(gdb) f0 set_quotes (lq=0x34c78 , rq=0x34c88 )at :530530 if (lquote != def_lquote)set print address off 關(guān)閉函數(shù)的參數(shù)地址顯示,如:(gdb) set print addr off(gdb) f0 set_quotes (lq=, rq=) at :530530 if (lquote != def_lquote)show print address 查看當(dāng)前地址顯示選項(xiàng)是否打開。set print array off show print array set print elements 這個選項(xiàng)主要是設(shè)置數(shù)組的,如果你的數(shù)組太大了,那么就可以指定一個來指定數(shù)據(jù)顯示的最大長度,當(dāng)?shù)竭_(dá)這個長度時,GDB就不再往下顯示了。這個選項(xiàng)默認(rèn)為off。show print sevenbitstrings查看字符顯示開關(guān)是否打開。typedef enum {Caterpillar, Cocoon, Butterfly}Bug_forms。} form。這個選項(xiàng)默認(rèn)是off。show print staticmembers查看靜態(tài)數(shù)據(jù)成員選項(xiàng)設(shè)置。八、歷史記錄當(dāng)你用GDB的print查看程序運(yùn)行時的數(shù)據(jù)時,你每一個print都會被GDB記錄下來。九、GDB環(huán)境變量你可以在GDB的調(diào)試環(huán)境中定義自己的變量,用來保存一些調(diào)試程序中的運(yùn)行數(shù)據(jù)。如:set $foo = *object_ptr使用環(huán)境變量時,GDB會在你第一次使用時創(chuàng)建這個變量,而在以后的使用中,則直接對其賦值。這是一個比較強(qiáng)大的功能,環(huán)境變量和程序變量的交互使用,將使得程序調(diào)試更為靈活便捷。(除了浮點(diǎn)寄存器)info allregisters查看所有寄存器的情況。如:p $eip。在某些時候,很有可能你的變量和GDB中的參數(shù)沖突,如:(gdb) whatis widthtype = double(gdb) p width$4 = 13(gdb) set width=47Invalid syntax in expression.因?yàn)?,set width是GDB的命令,所以,出現(xiàn)了“Invalid syntax in expression”的設(shè)置錯誤,此時,你可以使用set var命令來告訴GDB,width不是你GDB的參數(shù),而是程序的變量名,如:(gdb) set var width=47另外,還可能有些情況,GDB并不報(bào)告這種錯誤,所以保險(xiǎn)起見,在你改變程序變量取值時,最好都使用set var格式的GDB命令??梢允俏募男刑?,可以是file:line格式,可以是+num這種偏移量格式。所以最好是同一個函數(shù)中進(jìn)行跳轉(zhuǎn)。如:set $pc = 0x485 三、產(chǎn)生信號量使用singal命令,可以產(chǎn)生一個信號量給被調(diào)試的程序。所以取值也在這個范圍。returnreturn 使用return命令取消當(dāng)前函數(shù)的執(zhí)行,并立即返回,如果指定了,那么該表達(dá)式的值會被認(rèn)作函數(shù)的返回值。在不同語言中使用GDB——————————GDB支持下列語言:C, C++, Fortran, PASCAL, Java, Chill, assembly, 和 Modula2。也就是說,GDB會根據(jù)你所調(diào)試的程序的語言,來設(shè)置自己的語言環(huán)境,并讓GDB的命令跟著語言環(huán)境的改變而改變。這種跟著語言環(huán)境而改變的功能,真是體貼開發(fā)人員的一種設(shè)計(jì)。info source查看當(dāng)前文件的程序語言。
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1