青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

面對(duì)現(xiàn)實(shí),超越自己
逆水行舟,不進(jìn)則退
posts - 269,comments - 32,trackbacks - 0

四、維護(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)。

    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)的范圍(如:3-7)。其簡(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提供的command命令來設(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)大的支持。

    commands [bnum]
    ... command-list ...
    end

    為斷點(diǎn)號(hào)bnum指寫一個(gè)命令列表。當(dāng)程序被該斷點(diǎn)停住時(shí),gdb會(huì)依次運(yùn)行命令列表中的命令。

    例如:

        break foo if x>0
        commands
        printf "x is %d/n",x
        continue
        end
        斷點(diǎn)設(shè)置在函數(shù)foo中,斷點(diǎn)條件是x>0,如果程序被斷住后,也就是,一旦x的值在foo函數(shù)中大于0,GDB會(huì)自動(dòng)打印出x的值,并繼續(xù)運(yùn)行程序。

如果你要清除斷點(diǎn)上的命令序列,那么只要簡(jiǎn)單的執(zhí)行一下commands命令,并直接在打個(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:String.cc; line number:867
    [3] file:String.cc; line number:860
    [4] file:String.cc; line number:875
    [5] file:String.cc; line number:853
    [6] file:String.cc; line number:846
    [7] file:String.cc; line number:735
    > 2 4 6
    Breakpoint 1 at 0xb26c: file String.cc, line 867.
    Breakpoint 2 at 0xb344: file String.cc, line 875.
    Breakpoint 3 at 0xafcc: file String.cc, line 846.
    Multiple breakpoints were set.
    Use the "delete" command 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 [ignore-count]
    c [ignore-count]
    fg [ignore-count]
        恢復(fù)程序運(yùn)行,直到程序結(jié)束,或是下一個(gè)斷點(diǎn)到來。ignore-count表示忽略其后的斷點(diǎn)次數(shù)。continue,c,fg三個(gè)命令都是一樣的意思。


    step <count>
        單步跟蹤,如果有函數(shù)調(diào)用,他會(huì)進(jìn)入該函數(shù)。進(jìn)入函數(shù)的前提是,此函數(shù)被編譯有debug信息。很像VC等工具中的step in。后面可以加count也可以不加,不加表示一條條地執(zhí)行,加表示執(zhí)行后面的count條指令,然后再停住。

    next <count>
        同樣單步跟蹤,如果有函數(shù)調(diào)用,他不會(huì)進(jìn)入該函數(shù)。很像VC等工具中的step over。后面可以加count也可以不加,不加表示一條條地執(zhí)行,加表示執(zhí)行后面的count條指令,然后再停住。

    set step-mode
    set step-mode on
        打開step-mode模式,于是,在進(jìn)行單步跟蹤時(shí),程序不會(huì)因?yàn)闆]有debug信息而不停住。這個(gè)參數(shù)有很利于查看機(jī)器碼。

    set step-mod off
        關(guān)閉step-mode模式。

    finish
        運(yùn)行程序,直到當(dāng)前函數(shù)完成返回。并打印函數(shù)返回時(shí)的堆棧地址和返回值及參數(shù)值等信息。

    until 或 u
        當(dāng)你厭倦了在一個(gè)循環(huán)體內(nèi)單步跟蹤時(shí),這個(gè)命令可以運(yùn)行程序直到退出循環(huán)體。

    stepi 或 si
    nexti 或 ni
        單步跟蹤一條機(jī)器指令!一條程序代碼有可能由數(shù)條機(jī)器指令完成,stepi和nexti可以單步執(zhí)行機(jī)器指令。與之一樣有相同功能的命令是“display/i $pc” ,當(dāng)運(yùn)行完這個(gè)命令后,單步跟蹤會(huì)在打出程序代碼的同時(shí)打出機(jī)器指令(也就是匯編代碼)

九、信號(hào)(Signals)

信號(hào)是一種軟中斷,是一種處理異步事件的方法。一般來說,操作系統(tǒng)都支持許多信號(hào)。尤其是UNIX,比較重要應(yīng)用程序一般都會(huì)處理信號(hào)。UNIX定義了許多信號(hào),比如SIGINT表示中斷字符信號(hào),也就是Ctrl+C的信號(hào),SIGBUS表示硬件故障的信號(hào);SIGCHLD表示子進(jìn)程狀態(tài)改變信號(hào);SIGKILL表示終止程序運(yùn)行的信號(hào),等等。信號(hào)量編程是UNIX下非常重要的一種技術(shù)。

GDB有能力在你調(diào)試程序的時(shí)候處理任何一種信號(hào),你可以告訴GDB需要處理哪一種信號(hào)。你可以要求GDB收到你所指定的信號(hào)時(shí),馬上停住正在運(yùn)行的程序,以供你進(jìn)行調(diào)試。你可以用GDB的handle命令來完成這一功能。

    handle <signal> <keywords...>
        在GDB中定義一個(gè)信號(hào)處理。信號(hào)<signal>可以以SIG開頭或不以SIG開頭,可以用定義一個(gè)要處理信號(hào)的范圍(如:SIGIO-SIGKILL,表示處理從SIGIO信號(hào)到SIGKILL的信號(hào),其中包括SIGIO,SIGIOT,SIGKILL三個(gè)信號(hào)),也可以使用關(guān)鍵字all來標(biāo)明要處理所有的信號(hào)。一旦被調(diào)試的程序接收到信號(hào),運(yùn)行程序馬上會(huì)被GDB停住,以供調(diào)試。其<keywords>可以是以下幾種關(guān)鍵字的一個(gè)或多個(gè)。

        nostop
            當(dāng)被調(diào)試的程序收到信號(hào)時(shí),GDB不會(huì)停住程序的運(yùn)行,但會(huì)打出消息告訴你收到這種信號(hào)。
        stop
            當(dāng)被調(diào)試的程序收到信號(hào)時(shí),GDB會(huì)停住你的程序。
        print
            當(dāng)被調(diào)試的程序收到信號(hào)時(shí),GDB會(huì)顯示出一條信息。
        noprint
            當(dāng)被調(diào)試的程序收到信號(hào)時(shí),GDB不會(huì)告訴你收到信號(hào)的信息。
        pass
        noignore
            當(dāng)被調(diào)試的程序收到信號(hào)時(shí),GDB不處理信號(hào)。這表示,GDB會(huì)把這個(gè)信號(hào)交給被調(diào)試程序會(huì)處理。
        nopass
        ignore
            當(dāng)被調(diào)試的程序收到信號(hào)時(shí),GDB不會(huì)讓被調(diào)試程序來處理這個(gè)信號(hào)。


    info signals
    info handle
        查看有哪些信號(hào)在被GDB檢測(cè)中。

十、線程(Thread Stops)

如果你程序是多線程的話,你可以定義你的斷點(diǎn)是否在所有的線程上,或是在某個(gè)特定的線程。GDB很容易幫你完成這一工作。

    break <linespec> thread <threadno>
    break <linespec> thread <threadno> if ...
        linespec指定了斷點(diǎn)設(shè)置在的源程序的行號(hào)。threadno指定了線程的ID,注意,這個(gè)ID是GDB分配的,你可以通過“info threads”命令來查看正在運(yùn)行程序中的線程信息。如果你不指定thread <threadno>則表示你的斷點(diǎn)設(shè)在所有線程上面。你還可以為某線程指定斷點(diǎn)條件。如:
    
        (gdb) break frik.c:13 thread 28 if bartab > lim

    當(dāng)你的程序被GDB停住時(shí),所有的運(yùn)行線程都會(huì)被停住。這方便你你查看運(yùn)行程序的總體情況。而在你恢復(fù)程序運(yùn)行時(shí),所有的線程也會(huì)被恢復(fù)運(yùn)行。那怕是主進(jìn)程在被單步調(diào)試時(shí)。

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

posted on 2013-11-28 12:08 王海光 閱讀(524) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Linux
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品影音先锋| 麻豆精品视频| 免费看精品久久片| 蜜桃精品久久久久久久免费影院| 国产精品成人午夜| 国产精品久久久99| 国产一区99| 亚洲国产成人精品久久久国产成人一区| 国产日韩欧美综合精品| 伊人久久大香线蕉综合热线| 18成人免费观看视频| 亚洲高清色综合| 日韩一二在线观看| 欧美一区二区三区免费观看| 狂野欧美一区| 99re66热这里只有精品4| 亚洲一区二区在线免费观看| 久久视频在线免费观看| 欧美日韩免费观看一区三区| 国产婷婷色一区二区三区在线 | 性欧美大战久久久久久久免费观看| 亚洲欧美视频一区| 六月婷婷久久| 一本一本久久a久久精品牛牛影视| 亚洲在线观看视频网站| 久久久国产精品一区二区中文 | 国产老肥熟一区二区三区| 国产一区二区三区免费观看| 亚洲激情另类| 性欧美办公室18xxxxhd| 欧美激情中文字幕一区二区| 一区二区三区久久网| 久久视频在线看| 国产精品亚洲综合| 亚洲蜜桃精久久久久久久| 久久精品国产亚洲5555| 亚洲精品视频一区二区三区| 久久精品一区| 国产老女人精品毛片久久| 日韩视频二区| 蜜臀久久99精品久久久画质超高清| 99国产精品久久久久久久久久 | 一级成人国产| 欧美mv日韩mv国产网站app| 国产欧美一区二区三区视频| 一区二区三区日韩欧美精品| 欧美国产一区二区| 久久―日本道色综合久久| 国产亚洲欧美一区二区| 亚洲一区二区三区精品在线 | 亚洲自拍偷拍麻豆| 欧美激情片在线观看| 欧美aⅴ一区二区三区视频| 亚洲午夜伦理| 欧美午夜剧场| 一区二区三区日韩在线观看| 亚洲电影专区| 久久精品三级| 国内精品伊人久久久久av一坑| 亚洲欧美一区二区原创| 在线亚洲成人| 国产精品欧美日韩| 亚洲午夜精品一区二区三区他趣| 亚洲欧洲三级| 欧美日韩国产一区二区三区地区| 亚洲精品国产拍免费91在线| 亚洲国产日韩欧美| 欧美激情网友自拍| 日韩视频在线观看| 99国产成+人+综合+亚洲欧美| 欧美视频二区36p| 亚洲女同性videos| 亚洲欧美一级二级三级| 国语自产精品视频在线看8查询8| 久久亚洲综合色| 另类国产ts人妖高潮视频| 亚洲激情精品| 在线中文字幕日韩| 国产日韩欧美一区二区三区四区| 久久久久久亚洲精品杨幂换脸 | 亚洲高清久久久| 欧美国产精品劲爆| 中日韩午夜理伦电影免费| 99re66热这里只有精品3直播| 国产精品国产自产拍高清av王其| 香蕉久久久久久久av网站| 先锋资源久久| 91久久极品少妇xxxxⅹ软件| 亚洲麻豆视频| 国产亚洲人成a一在线v站 | 免费美女久久99| 欧美精品三级日韩久久| 亚洲免费视频一区二区| 久久成人av少妇免费| 亚洲人成人一区二区三区| av成人国产| 精品动漫3d一区二区三区| 亚洲精品国产品国语在线app| 国产精品国产三级国产普通话三级| 久久精品一区四区| 欧美精品国产精品日韩精品| 欧美在线啊v| 欧美3dxxxxhd| 久久超碰97中文字幕| 欧美激情小视频| 久久久999| 欧美日韩蜜桃| 欧美成年网站| 国产欧美视频一区二区| 亚洲国产合集| 久久久久久久一区| 宅男精品视频| 狂野欧美性猛交xxxx巴西| 亚洲自拍电影| 欧美国产日韩一区二区在线观看 | 亚洲巨乳在线| 精品福利av| 亚洲欧美综合v| 亚洲一区3d动漫同人无遮挡| 久久综合久色欧美综合狠狠| 欧美一区二区三区免费视| 欧美人交a欧美精品| 裸体一区二区三区| 国产一区二区三区日韩欧美| 一本久道久久综合婷婷鲸鱼| 91久久久精品| 久久综合伊人77777蜜臀| 久久精品123| 国产美女精品人人做人人爽| 99视频日韩| 亚洲作爱视频| 欧美精品日韩| 亚洲人成在线播放| 亚洲人成网站影音先锋播放| 久久欧美肥婆一二区| 久久久精品动漫| 国产欧美一区二区三区另类精品| 亚洲午夜国产成人av电影男同| 一区二区三区毛片| 欧美理论大片| 99精品免费视频| 亚洲小说春色综合另类电影| 欧美日本亚洲| 亚洲精品国精品久久99热一| 亚洲精品在线三区| 欧美日本韩国一区二区三区| 亚洲人体影院| 亚洲一区二区影院| 国产麻豆成人精品| 欧美综合第一页| 欧美第一黄网免费网站| 亚洲精品四区| 国产精品高潮久久| 亚久久调教视频| 免费日本视频一区| 亚洲人成人一区二区在线观看| 欧美成人午夜激情视频| 亚洲美女诱惑| 久久精品国产91精品亚洲| 精品成人在线观看| 欧美激情一区二区三区全黄 | 久久网站免费| 亚洲国产精品一区二区第一页| 亚洲区一区二| 国产精品乱看| 久久久夜色精品亚洲| 亚洲免费观看视频| 久久精品国产一区二区三| 在线国产精品播放| 欧美日韩亚洲综合一区| 欧美一区二区性| 91久久精品美女高潮| 午夜国产精品视频免费体验区| 怡红院精品视频| 欧美日韩一区成人| 亚洲级视频在线观看免费1级| 国产精品99久久久久久宅男| 国产欧美日韩高清| 欧美成人福利视频| 亚洲欧美日韩在线播放| 欧美成人免费va影院高清| 在线一区二区日韩| 在线观看亚洲a| 国产精品久久久亚洲一区 | 久久亚洲春色中文字幕久久久| 日韩午夜在线| 久久综合中文字幕| 亚洲一区二区毛片| 亚洲精品1234| 国产欧美一区二区精品性色| 欧美精品成人一区二区在线观看| 午夜视频在线观看一区二区三区| 欧美激情一区二区三区在线视频观看 | 亚洲国产精品成人一区二区| 国产精品第2页| 牛牛精品成人免费视频| 欧美在线免费一级片| 一区二区三区四区五区在线| 亚洲激情av在线| 欧美成人亚洲成人|