一江春水向東流

          做一個有思想的人,期待與每一位熱愛思考的人交流,您的關注是對我最大的支持。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            44 隨筆 :: 139 文章 :: 81 評論 :: 0 Trackbacks

          1. 前言:
          有的程序可以通過編譯, 但在運行時會出現Segment fault(段錯誤). 這通常都是指針錯誤引起的.
          但這不像編譯錯誤一樣會提示到文件->行, 而是沒有任何信息, 使得我們的調試變得困難起來.

          2. gdb:
          有一種辦法是, 我們用gdb的step, 一步一步尋找.
          這放在短小的代碼中是可行的, 但要讓你step一個上萬行的代碼, 我想你會從此厭惡程序員這個名字, 而把他叫做調試員.
          我們還有更好的辦法, 這就是core file.

          3. ulimit:
          如果想讓系統在信號中斷造成的錯誤時產生core文件, 我們需要在shell中按如下設置:
          #設置core大小為無限
          ulimit -c unlimited
          #設置文件大小為無限
          ulimit unlimited


          這些需要有root權限, 在ubuntu下每次重新打開中斷都需要重新輸入上面的第一條命令, 來設置core大小為無限.

          4. 用gdb查看core文件:
          下面我們可以在發生運行時信號引起的錯誤時發生core dump了.
          發生core dump之后, 用gdb進行查看core文件的內容, 以定位文件中引發core dump的行.
          gdb [exec file] [core file]
          如:
          gdb ./test test.core
          在進入gdb后, 用bt命令查看backtrace以檢查發生程序運行到哪里, 來定位core dump的文件->行.

          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1669532

          posted on 2008-01-21 22:18 allic 閱讀(2824) 評論(0)  編輯  收藏 所屬分類: C/C++
          主站蜘蛛池模板: 锦屏县| 湘潭市| 廊坊市| 枣阳市| 焉耆| 太仆寺旗| 马公市| 绍兴县| 连州市| 宜宾县| 延安市| 英吉沙县| 瓦房店市| 瓮安县| 彭阳县| 叙永县| 兴山县| 宝山区| 介休市| 扎囊县| 云南省| 商水县| 嵊泗县| 丰原市| 布拖县| 晋中市| 广丰县| 西安市| 蚌埠市| 巩留县| 云安县| 玛曲县| 云梦县| 静海县| 井冈山市| 孟村| 陈巴尔虎旗| 天峻县| 塘沽区| 阿克苏市| 西宁市|