• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            面對(duì)現(xiàn)實(shí),超越自己
            逆水行舟,不進(jìn)則退
            posts - 269,comments - 32,trackbacks - 0

            七、設(shè)置顯示選項(xiàng)

                GDB中關(guān)于顯示的選項(xiàng)比較多,這里我只例舉大多數(shù)常用的選項(xiàng)。

                set print address 
                set print address on 
                    打開(kāi)地址輸出,當(dāng)程序顯示函數(shù)信息時(shí),GDB會(huì)顯出函數(shù)的參數(shù)地址。系統(tǒng)默認(rèn)為打開(kāi)的,如:        
                    (gdb) f
                    #0  set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>")
                        at input.c:530
                    530         if (lquote != def_lquote)


                set print address off 
                    關(guān)閉函數(shù)的參數(shù)地址顯示,如:       
                    (gdb) set print addr off
                    (gdb) f
                    #0  set_quotes (lq="<<", rq=">>") at input.c:530
                    530         if (lquote != def_lquote)

                show print address 
                    查看當(dāng)前地址顯示選項(xiàng)是否打開(kāi)。       
                set print array 
                set print array on 
                    打開(kāi)數(shù)組顯示,打開(kāi)后當(dāng)數(shù)組顯示時(shí),每個(gè)元素占一行,如果不打開(kāi)的話(huà),每個(gè)元素則以逗號(hào)分隔。這個(gè)選項(xiàng)默認(rèn)是關(guān)閉的。與之相關(guān)的兩個(gè)命令如下,我就不再多說(shuō)了。     
                set print array off 
                show print array

                set print elements <number-of-elements>
                    這個(gè)選項(xiàng)主要是設(shè)置數(shù)組的,如果你的數(shù)組太大了,那么就可以指定一個(gè)<number-of-elements>來(lái)指定數(shù)據(jù)顯示的最大長(zhǎng)度,當(dāng)?shù)竭_(dá)這個(gè)長(zhǎng)度時(shí),GDB就不再往下顯示了。如果設(shè)置為0,則表示不限制。        
                show print elements 
                    查看print elements的選項(xiàng)信息。        
                set print null-stop <on/off>
                    如果打開(kāi)了這個(gè)選項(xiàng),那么當(dāng)顯示字符串時(shí),遇到結(jié)束符則停止顯示。這個(gè)選項(xiàng)默認(rèn)為off。  
                set print pretty on 
                    如果打開(kāi)printf pretty這個(gè)選項(xiàng),那么當(dāng)GDB顯示結(jié)構(gòu)體時(shí)會(huì)比較漂亮。如:

                        $1 = {
                          next = 0x0,
                          flags = {
                            sweet = 1,
                            sour = 1
                          },
                          meat = 0x54 "Pork"
                        }

                set print pretty off
                    關(guān)閉printf pretty這個(gè)選項(xiàng),GDB顯示結(jié)構(gòu)體時(shí)會(huì)如下顯示:      
                        $1 = {next = 0x0, flags = {sweet = 1, sour = 1}, meat = 0x54 "Pork"}        
                show print pretty 
                    查看GDB是如何顯示結(jié)構(gòu)體的。        
                set print sevenbit-strings <on/off>
                    設(shè)置字符顯示,是否按“/nnn”的格式顯示,如果打開(kāi),則字符串或字符數(shù)據(jù)按/nnn顯示,如“/065”。   
                show print sevenbit-strings
                    查看字符顯示開(kāi)關(guān)是否打開(kāi)。         
                set print union <on/off>
                    設(shè)置顯示結(jié)構(gòu)體時(shí),是否顯式其內(nèi)的聯(lián)合體數(shù)據(jù)。例如有以下數(shù)據(jù)結(jié)構(gòu):       
                    typedef enum {Tree, Bug} Species;
                    typedef enum {Big_tree, Acorn, Seedling} Tree_forms;
                    typedef enum {Caterpillar, Cocoon, Butterfly}
                                  Bug_forms;
                    
                    struct thing {
                      Species it;
                      union {
                        Tree_forms tree;
                        Bug_forms bug;
                      } form;
                    };
                    
                    struct thing foo = {Tree, {Acorn}};

                    當(dāng)打開(kāi)這個(gè)開(kāi)關(guān)時(shí),執(zhí)行 p foo 命令后,會(huì)如下顯示:
                        $1 = {it = Tree, form = {tree = Acorn, bug = Cocoon}}
                    
                    當(dāng)關(guān)閉這個(gè)開(kāi)關(guān)時(shí),執(zhí)行 p foo 命令后,會(huì)如下顯示:
                        $1 = {it = Tree, form = {...}}

                show print union
                    查看聯(lián)合體數(shù)據(jù)的顯示方式   
                set print object <on/off>
                    在C++中,如果一個(gè)對(duì)象指針指向其派生類(lèi),如果打開(kāi)這個(gè)選項(xiàng),GDB會(huì)自動(dòng)按照虛方法調(diào)用的規(guī)則顯示輸出,如果關(guān)閉這個(gè)選項(xiàng)的話(huà),GDB就不管虛函數(shù)表了。這個(gè)選項(xiàng)默認(rèn)是off。
                show print object
                    查看對(duì)象選項(xiàng)的設(shè)置。     
                set print static-members <on/off>
                    這個(gè)選項(xiàng)表示,當(dāng)顯示一個(gè)C++對(duì)象中的內(nèi)容是,是否顯示其中的靜態(tài)數(shù)據(jù)成員。默認(rèn)是on。   
                show print static-members
                    查看靜態(tài)數(shù)據(jù)成員選項(xiàng)設(shè)置。        
                set print vtbl <on/off>
                    當(dāng)此選項(xiàng)打開(kāi)時(shí),GDB將用比較規(guī)整的格式來(lái)顯示虛函數(shù)表時(shí)。其默認(rèn)是關(guān)閉的。       
                show print vtbl
                    查看虛函數(shù)顯示格式的選項(xiàng)。        
            八、歷史記錄

                當(dāng)你用GDB的print查看程序運(yùn)行時(shí)的數(shù)據(jù)時(shí),你每一個(gè)print都會(huì)被GDB記錄下來(lái)。GDB會(huì)以$1, $2, $3 .....這樣的方式為你每一個(gè)print命令編上號(hào)。于是,你可以使用這個(gè)編號(hào)訪(fǎng)問(wèn)以前的表達(dá)式,如$1。這個(gè)功能所帶來(lái)的好處是,如果你先前輸入了一個(gè)比較長(zhǎng)的表達(dá)式,如果你還想查看這個(gè)表達(dá)式的值,你可以使用歷史記錄來(lái)訪(fǎng)問(wèn),省去了重復(fù)輸入。
            九、GDB環(huán)境變量

                你可以在GDB的調(diào)試環(huán)境中定義自己的變量,用來(lái)保存一些調(diào)試程序中的運(yùn)行數(shù)據(jù)。要定義一個(gè)GDB的變量很簡(jiǎn)單只需。使用GDB的set命令。GDB的環(huán)境變量和UNIX一樣,也是以$起頭。如:  
                set $foo = *object_ptr 
                使用環(huán)境變量時(shí),GDB會(huì)在你第一次使用時(shí)創(chuàng)建這個(gè)變量,而在以后的使用中,則直接對(duì)其賦值。環(huán)境變量沒(méi)有類(lèi)型,你可以給環(huán)境變量定義任一的類(lèi)型。包括結(jié)構(gòu)體和數(shù)組。   
                show convenience 
                    該命令查看當(dāng)前所設(shè)置的所有的環(huán)境變量。
                    
                這是一個(gè)比較強(qiáng)大的功能,環(huán)境變量和程序變量的交互使用,將使得程序調(diào)試更為靈活便捷。例如:   
                    set $i = 0
                    print bar[$i++]->contents   
                于是,當(dāng)你就不必,print bar[0]->contents, print bar[1]->contents地輸入命令了。輸入這樣的命令后,只用敲回車(chē),重復(fù)執(zhí)行上一條語(yǔ)句,環(huán)境變量會(huì)自動(dòng)累加,從而完成逐個(gè)輸出的功能。     
            十、查看寄存器

                要查看寄存器的值,很簡(jiǎn)單,可以使用如下命令:  
                info registers 
                    查看寄存器的情況。(除了浮點(diǎn)寄存器)    
                info all-registers
                    查看所有寄存器的情況。(包括浮點(diǎn)寄存器)   
                info registers <regname ...>
                    查看所指定的寄存器的情況。       
                寄存器中放置了程序運(yùn)行時(shí)的數(shù)據(jù),比如程序當(dāng)前運(yùn)行的指令地址(ip),程序的當(dāng)前堆棧地址(sp)等等。你同樣可以使用print命令來(lái)訪(fǎng)問(wèn)寄存器的情況,只需要在寄存器名字前加一個(gè)$符號(hào)就可以了。如:p $eip。

            本文轉(zhuǎn)自:http://blog.csdn.net/haoel/article/details/2884

            posted on 2013-11-28 12:18 王海光 閱讀(439) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Linux
            色综合久久久久综合99| 97久久超碰国产精品旧版| 久久99精品久久久久久| 色综合久久综合网观看| 久久国产香蕉视频| 亚洲天堂久久久| AV无码久久久久不卡蜜桃| 国产精品丝袜久久久久久不卡| 91精品国产综合久久香蕉| 日本五月天婷久久网站| 久久精品国产精品青草app| 怡红院日本一道日本久久 | 污污内射久久一区二区欧美日韩 | 国产精品熟女福利久久AV| 97精品伊人久久久大香线蕉| 久久免费高清视频| 久久久久99精品成人片直播| 久久久这里有精品| 国产精品美女久久久久AV福利| 亚洲午夜福利精品久久| 精品久久久久久久中文字幕| .精品久久久麻豆国产精品| 久久香综合精品久久伊人| 久久亚洲电影| 国产巨作麻豆欧美亚洲综合久久| 久久久久99精品成人片欧美| 囯产极品美女高潮无套久久久 | 久久人人爽人人爽人人片AV高清 | 国内精品久久久久影院老司| 一级做a爱片久久毛片| 99精品久久久久中文字幕| 亚洲国产精品成人久久| 久久无码AV中文出轨人妻| 久久久久久久久66精品片| 久久影院亚洲一区| 中文字幕亚洲综合久久菠萝蜜| 久久精品国产一区二区三区| 久久久久国产视频电影| 国产高清美女一级a毛片久久w| 中文字幕成人精品久久不卡| 国内精品久久久久影院免费|