• <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>

            大龍的博客

            常用鏈接

            統計

            最新評論

            gdb中忽略信號處理

            信號(Signals)

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

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

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

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


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

            另外補充:

            信號的處理
            程序是和網絡相關的,調試期間經常地收到SIGPIPE,導致gdb停下來。看了一下gdb info,解決方法很簡單。用handle命令設置一下缺省signal的處理行為就可以了:
               handle SIGPIPE nostop
            如果連提示信息都不想看見,就可以這樣設置:
               handle SIGPIPE nostop noprint
            就可以了。其他相關信號也可以類似處理。想了解目前的signal狀態可以使用info signal察看。

            啟動配置文件
            GDB使用中比較麻煩的事情,就是每次啟動,還要手動敲一把命令,特別是斷點比較多的情況,這個特便影響,工作效率。查了一下gdb info,gdb支持自動讀取一個啟動腳本文件.gdbinit,所以經常輸入的啟動命令,就都可以寫在gdb啟動目錄的.gdbinit里面。比如
            .gdbinit:
               file myapp
               handle SIGPIPE nostop
               break ss.c:100
               break ss.c:200
               run
            GDB和bash類似,也支持source這個命令,執行另外一個腳本文件。所以可以修改一下.gdbinit:
            .gdbinit:
               file myapp
               handle SIGPIPE nostop
               source gdb.break
               run
            gdb.break:
               break ss.c:100
               break ss.c:200
            這樣修改的斷點配置,只需要編輯gdb.break就可以了。再后來,偶而還是需要單獨啟動GDB,不想執行自動腳本,于是又改進了一下。首先把.gdbinit命名為gdb.init,然后定義一個shell alias:
               $ alias .gdb=”gdb -x gdb.init”

            這樣如果需要使用自動腳本,就用.gdb命令,否則用gdb進入交互狀態的gdb。這樣配置以后可以一個簡單命令就開始調試,整個效率就能提高不少。

            注:轉自http://blog.scaner.i.thu.cn/index.php/2006/04/15/gdb-tips-1/

            注解

            1alias命令

            alias顧名思義就是起別名的意思,在linux里,可以通過alias命令為常用命令設置快捷方式,命令格式如下: alias name='command' 例如:alias del='rm'

            欲顯示系統已有別名,直接使用 alias或alias -p

            若需要設置的命令別名比較多,可以直接修改/etc/bashrc或~/.bashrc,將需要的別名寫到里面即可,不同之處是/etc/bashrc設置的別名對于所有登錄用戶都起作用,而~/.bashrc只對目前用戶起作用。

            posted on 2011-12-06 22:40 大龍 閱讀(4281) 評論(0)  編輯 收藏 引用

            2020国产成人久久精品| 精品久久久噜噜噜久久久 | 蜜臀久久99精品久久久久久小说| 久久亚洲精品成人无码网站| 99久久夜色精品国产网站| 99国产精品久久久久久久成人热| 久久精品国产91久久综合麻豆自制 | 国内精品伊人久久久影院| 色8久久人人97超碰香蕉987| 国产2021久久精品| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 久久久久久久波多野结衣高潮| 国产精品久久久久久一区二区三区 | 久久久久亚洲国产| 国产成人精品久久二区二区| 久久久久久精品成人免费图片| 久久99精品国产一区二区三区| 亚洲七七久久精品中文国产| 久久久久综合网久久| 久久综合给久久狠狠97色| 久久久99精品成人片中文字幕 | 日韩精品久久久久久久电影蜜臀 | 精品久久久无码人妻中文字幕豆芽| 久久久久亚洲AV无码专区桃色 | 亚洲精品乱码久久久久久久久久久久 | 久久精品国产亚洲av影院| 欧美激情精品久久久久久久| 欧美久久综合性欧美| 久久综合给合久久国产免费| 久久免费看黄a级毛片| 一级a性色生活片久久无| 久久国产精品免费一区| 日本免费一区二区久久人人澡 | 国产精品成人久久久久久久| 久久精品草草草| 97久久精品人人澡人人爽| 精品久久久久久国产潘金莲| 久久大香香蕉国产| 99re久久精品国产首页2020| 99久久国产热无码精品免费| 69久久精品无码一区二区|