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

面對現實,超越自己
逆水行舟,不進則退
posts - 269,comments - 32,trackbacks - 0

四、維護停止點

上面說了如何設置程序的停止點,GDB中的停止點也就是上述的三類。在GDB中,如果你覺得已定義好的停止點沒有用了,你可以使用delete、clear、disable、enable這幾個命令來進行維護。

    clear
        清除所有的已定義的停止點。

    clear <function>
    clear <filename:function>
        清除所有設置在函數上的停止點。

    clear <linenum>
    clear <filename:linenum>
        清除所有設置在指定行上的停止點。

    delete [breakpoints] [range...]
        刪除指定的斷點,breakpoints為斷點號。如果不指定斷點號,則表示刪除所有的斷點。range 表示斷點號的范圍(如:3-7)。其簡寫命令為d。


比刪除更好的一種方法是disable停止點,disable了的停止點,GDB不會刪除,當你還需要時,enable即可,就好像回收站一樣。

    disable [breakpoints] [range...]
        disable所指定的停止點,breakpoints為停止點號。如果什么都不指定,表示disable所有的停止點。簡寫命令是dis.

    enable [breakpoints] [range...]
        enable所指定的停止點,breakpoints為停止點號。

    enable [breakpoints] once range...
        enable所指定的停止點一次,當程序停止后,該停止點馬上被GDB自動disable。

    enable [breakpoints] delete range...
        enable所指定的停止點一次,當程序停止后,該停止點馬上被GDB自動刪除。

五、停止條件維護

前面在說到設置斷點時,我們提到過可以設置一個條件,當條件成立時,程序自動停止,這是一個非常強大的功能,這里,我想專門說說這個條件的相關維護命令。一般來說,為斷點設置一個條件,我們使用if關鍵詞,后面跟其斷點條件。并且,條件設置好后,我們可以用condition命令來修改斷點的條件。(只有break和watch命令支持if,catch目前暫不支持if)

    condition <bnum> <expression>
        修改斷點號為bnum的停止條件為expression。

    condition <bnum>
        清除斷點號為bnum的停止條件。


還有一個比較特殊的維護命令ignore,你可以指定程序運行時,忽略停止條件幾次。

    ignore <bnum> <count>
        表示忽略斷點號為bnum的停止條件count次。

六、為停止點設定運行命令

我們可以使用GDB提供的command命令來設置停止點的運行命令。也就是說,當運行的程序在被停止住時,我們可以讓其自動運行一些別的命令,這很有利行自動化調試。對基于GDB的自動化調試是一個強大的支持。

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

    為斷點號bnum指寫一個命令列表。當程序被該斷點停住時,gdb會依次運行命令列表中的命令。

    例如:

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

如果你要清除斷點上的命令序列,那么只要簡單的執行一下commands命令,并直接在打個end就行了。

七、斷點菜單

在C++中,可能會重復出現同一個名字的函數若干次(函數重載),在這種情況下,break <function>不能告訴GDB要停在哪個函數的入口。當然,你可以使用break <function(type)>也就是把函數的參數類型告訴GDB,以指定一個函數。否則的話,GDB會給你列出一個斷點菜單供你選擇你所需要的斷點。你只要輸入你菜單列表中的編號就可以了。如:

    (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的重載函數,你可以選一下列表編號就行了。0表示放棄設置斷點,1表示所有函數都設置斷點。

八、恢復程序運行和單步調試

當程序被停住了,你可以用continue命令恢復程序的運行直到程序結束,或下一個斷點到來。也可以使用step或next命令單步跟蹤程序。

    continue [ignore-count]
    c [ignore-count]
    fg [ignore-count]
        恢復程序運行,直到程序結束,或是下一個斷點到來。ignore-count表示忽略其后的斷點次數。continue,c,fg三個命令都是一樣的意思。


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

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

    set step-mode
    set step-mode on
        打開step-mode模式,于是,在進行單步跟蹤時,程序不會因為沒有debug信息而不停住。這個參數有很利于查看機器碼。

    set step-mod off
        關閉step-mode模式。

    finish
        運行程序,直到當前函數完成返回。并打印函數返回時的堆棧地址和返回值及參數值等信息。

    until 或 u
        當你厭倦了在一個循環體內單步跟蹤時,這個命令可以運行程序直到退出循環體。

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

九、信號(Signals)

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

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

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

        nostop
            當被調試的程序收到信號時,GDB不會停住程序的運行,但會打出消息告訴你收到這種信號。
        stop
            當被調試的程序收到信號時,GDB會停住你的程序。
        print
            當被調試的程序收到信號時,GDB會顯示出一條信息。
        noprint
            當被調試的程序收到信號時,GDB不會告訴你收到信號的信息。
        pass
        noignore
            當被調試的程序收到信號時,GDB不處理信號。這表示,GDB會把這個信號交給被調試程序會處理。
        nopass
        ignore
            當被調試的程序收到信號時,GDB不會讓被調試程序來處理這個信號。


    info signals
    info handle
        查看有哪些信號在被GDB檢測中。

十、線程(Thread Stops)

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

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

    當你的程序被GDB停住時,所有的運行線程都會被停住。這方便你你查看運行程序的總體情況。而在你恢復程序運行時,所有的線程也會被恢復運行。那怕是主進程在被單步調試時。

本文轉自:http://blog.csdn.net/haoel/article/details/2881

posted on 2013-11-28 12:08 王海光 閱讀(529) 評論(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>
            久久精品国产91精品亚洲| 亚洲宅男天堂在线观看无病毒| 亚洲精品小视频| 精久久久久久| 在线观看91久久久久久| 在线精品国产欧美| 亚洲欧洲精品一区二区三区| 日韩亚洲一区在线播放| 亚洲一级片在线观看| 欧美在线999| 玖玖精品视频| 亚洲国产精品一区二区第四页av| 久久综合福利| 日韩亚洲欧美精品| 欧美中文在线免费| 美女黄毛**国产精品啪啪 | 国内外成人免费激情在线视频| 国产一区亚洲一区| 亚洲日本中文字幕| 西瓜成人精品人成网站| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲国产精品123| 亚洲欧美色一区| 欧美激情精品久久久久久免费印度| 国产精品萝li| 亚洲美女视频网| 久久精品亚洲精品国产欧美kt∨| 亚洲国产欧美一区二区三区同亚洲| 亚洲午夜极品| 欧美精品久久天天躁| 韩国女主播一区| 亚洲欧美日韩国产精品| 欧美国产日韩一二三区| 性久久久久久久久久久久| 欧美大片在线看| 一区二区三区在线不卡| 亚洲视频一区二区免费在线观看| 鲁大师影院一区二区三区| a4yy欧美一区二区三区| 欧美大成色www永久网站婷| 国内精品亚洲| 欧美有码在线观看视频| 一区二区不卡在线视频 午夜欧美不卡' | 亚洲欧美综合v| 91久久极品少妇xxxxⅹ软件| 久久久久久尹人网香蕉| 国产亚洲一区精品| 亚洲综合日韩| 亚洲作爱视频| 欧美日韩免费| 一本色道久久综合亚洲91| 欧美韩日亚洲| 久久亚洲精品欧美| 国产夜色精品一区二区av| 羞羞视频在线观看欧美| 亚洲天堂av图片| 国产精品免费视频观看| 亚洲综合国产| 亚洲欧美电影院| 国产伦理一区| 久久久久国色av免费看影院 | 伊人久久噜噜噜躁狠狠躁| 久久精品123| 欧美一级理论片| 韩国福利一区| 欧美不卡视频| 欧美大片在线观看一区| 99re8这里有精品热视频免费 | 欧美电影在线观看完整版| 久久精品国产69国产精品亚洲| 国产日韩欧美视频在线| 午夜在线视频观看日韩17c| 亚洲伊人一本大道中文字幕| 国产伦精品一区二区三区免费迷| 久久成人精品视频| 久久精品系列| 91久久黄色| 99热这里只有成人精品国产| 国产精品视屏| 美女福利精品视频| 欧美第一黄网免费网站| 亚洲视频一区二区| 香蕉精品999视频一区二区 | 亚洲精品乱码久久久久久久久| 亚洲精品日本| 国产日韩欧美麻豆| 欧美激情视频免费观看| 国产精品久久久久久久久动漫| 久久国产视频网站| 欧美顶级艳妇交换群宴| 亚洲男人天堂2024| 久久蜜桃资源一区二区老牛| 中文高清一区| 久久国产乱子精品免费女| 最近看过的日韩成人| 亚洲一级影院| 亚洲精品无人区| 欧美在线影院| 亚洲婷婷综合久久一本伊一区| 久久不射中文字幕| 亚洲婷婷综合色高清在线| 欧美一区二区三区视频在线| 999在线观看精品免费不卡网站| 欧美亚洲在线观看| 亚洲少妇自拍| 欧美成人有码| 免费观看成人www动漫视频| 国产精品视频精品| 亚洲精品精选| 最新成人在线| 久久久久久午夜| 欧美在线电影| 欧美肉体xxxx裸体137大胆| 免费观看一级特黄欧美大片| 国产精品亚洲激情| 一本色道久久88综合亚洲精品ⅰ| 91久久精品国产91久久性色| 欧美亚洲一区二区在线| 校园激情久久| 国产精品久99| 亚洲视频在线看| 中文国产成人精品| 欧美精品一区二区三区四区 | 欧美一级视频| 欧美日韩亚洲高清一区二区| 亚洲高清123| 亚洲欧洲日本在线| 嫩草成人www欧美| 欧美激情视频在线播放| 在线日韩欧美| 久久xxxx精品视频| 欧美日韩欧美一区二区| 欧美国产91| 亚洲人成网站777色婷婷| 久久久精品国产免大香伊| 久久精品三级| 国产一区二区三区在线免费观看 | 亚洲一区欧美激情| 欧美日韩在线一区二区三区| 亚洲精品在线观看免费| 一区二区三区.www| 欧美视频在线观看免费| 夜夜爽www精品| 午夜欧美精品| 国产午夜精品理论片a级大结局| 欧美一区二区三区视频免费播放 | 一区二区三区高清在线| 亚洲欧美另类在线观看| 国产美女在线精品免费观看| 亚洲欧美日韩中文播放| 久久久国际精品| 在线成人av网站| 欧美高清不卡在线| 一区二区三区久久网| 欧美一区二区成人6969| 国产专区精品视频| 久久综合伊人77777| 亚洲国产精品成人一区二区| 99精品视频网| 国产啪精品视频| 免费av成人在线| 日韩亚洲欧美中文三级| 欧美一级二区| 亚洲国产成人高清精品| 欧美日韩极品在线观看一区| 性欧美1819性猛交| 亚洲国产一区二区精品专区| 亚洲一区精品在线| 伊人色综合久久天天| 欧美日韩国产成人精品| 欧美在线视频一区二区三区| 91久久久亚洲精品| 久久精品视频导航| 一本色道综合亚洲| 精品99一区二区三区| 欧美午夜视频一区二区| 一区二区不卡在线视频 午夜欧美不卡'| 欧美日韩网址| 麻豆国产精品va在线观看不卡 | 一本色道精品久久一区二区三区| 久久午夜av| 亚洲一区不卡| 亚洲国产另类久久精品| 国产精品揄拍一区二区| 欧美成人久久| 久久久精品网| 亚洲永久在线| 亚洲精品乱码久久久久久日本蜜臀| 欧美亚洲在线观看| 亚洲美女毛片| 最近看过的日韩成人| 一本久久综合亚洲鲁鲁| 国产精品无人区| 在线视频精品一区| 欧美国产三区| 久久久噜噜噜久噜久久| 亚洲自拍啪啪| 亚洲私人影院在线观看| 日韩一本二本av| 亚洲日韩欧美视频一区|