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

               C++ 技術中心

               :: 首頁 :: 聯(lián)系 ::  :: 管理
              160 Posts :: 0 Stories :: 87 Comments :: 0 Trackbacks

            公告

            鄭重聲明:本BLOG所發(fā)表的原創(chuàng)文章,作者保留一切權利。必須經過作者本人同意后方可轉載,并注名作者(天空)和出處(CppBlog.com)。作者Email:coder@luckcoder.com

            留言簿(27)

            搜索

            •  

            最新隨筆

            最新評論

            評論排行榜

            Linux下的C程序常常會因為內存訪問錯誤等原因造成segment fault(段錯誤),此時如果系統(tǒng)core dump功能是打開的,那么將會有內存映像轉儲到硬盤上來,之后可以用gdb對core文件進行分析,還原系統(tǒng)發(fā)生段錯誤時刻的堆棧情況。這對于我們發(fā)現(xiàn)程序bug很有幫助。
            使用ulimit -a可以查看系統(tǒng)core文件的大小限制;使用ulimit -c [kbytes]可以設置系統(tǒng)允許生成的core文件大小,例如
            ulimit -c 0 不產生core文件
            ulimit -c 100 設置core文件最大為100k
            ulimit -c unlimited 不限制core文件大小
            先看一段會造成段錯誤的程序:
            #include
            int main()
            {
            char *ptr="linuxers.cn";
            *ptr=0;
            }
            編譯運行后結果如下:
            [leconte@localhost test]$ gcc -g -o test a.c
            [leconte@localhost test]$ ./test
            段錯誤
            此時并沒有產生core文件,接下來使用ulimit -c設置core文件大小為無限制,再執(zhí)行./test程序,結果如下:
            [leconte@localhost ~]$ ulimit -a
            core file size (blocks, -c) 0
            [leconte@localhost test]$ ulimit -c unlimited
            [leconte@localhost test]$ ulimit -a
            core file size (blocks, -c) unlimited
            [leconte@localhost test]$ ./test
            段錯誤 (core dumped)
            [leconte@localhost test]$ ls -al core.*
            -rw------- 1 leconte leconte 139264 01-06 22:31 core.2065
            可見core文件已經生成,接下來可以用gdb分析,查看堆棧情況:
            [leconte@localhost test]$ gdb ./test core.2065
            GNU gdb Fedora (6.8-27.el5)
            Copyright (C) 2008 Free Software Foundation, Inc.
            License GPLv3+: GNU GPL version 3 or later
            This is free software: you are free to change and redistribute it.
            There is NO WARRANTY, to the extent permitted by law. Type "show copying"
            and "show warranty" for details.
            This GDB was configured as "i386-redhat-linux-gnu"...
            warning: exec file is newer than core file.
            warning: Can't read pathname for load map: Input/output error.
            Reading symbols from /lib/libc.so.6...done.
            Loaded symbols for /lib/libc.so.6
            Reading symbols from /lib/ld-linux.so.2...done.
            Loaded symbols for /lib/ld-linux.so.2
            Core was generated by `./test'.
            Program terminated with signal 11, Segmentation fault.
            [New process 2065]
            #0 0x0804836f in main () at a.c:6
            6 *ptr=0;
            從上述輸出可以清楚的看到,段錯誤出現(xiàn)在a.c的第6行,問題已經清晰地定位到了。
            很多系統(tǒng)默認的core文件大小都是0,我們可以通過在shell的啟動腳本/etc/bashrc或者~/.bashrc等地方來加入 ulimit -c 命令來指定core文件大小,從而確保core文件能夠生成。
            除此之外,還可以在/proc/sys/kernel/core_pattern里設置core文件的文件名模板,詳情請看core的官方man手冊。
            posted on 2012-10-22 00:11 C++技術中心 閱讀(4086) 評論(0)  編輯 收藏 引用 所屬分類: Linux 編程
            久久久久亚洲AV成人网人人网站| 久久久无码精品亚洲日韩蜜臀浪潮| 久久无码人妻一区二区三区午夜 | 久久水蜜桃亚洲av无码精品麻豆 | 国产麻豆精品久久一二三| 久久综合综合久久综合| 欧美777精品久久久久网| 久久久久久国产a免费观看不卡| 久久99九九国产免费看小说| 亚洲综合精品香蕉久久网| 狠狠久久亚洲欧美专区| 日韩精品久久久久久久电影| 欧美午夜精品久久久久免费视| 久久精品草草草| 免费精品久久天干天干| 国产午夜电影久久| 久久天天躁狠狠躁夜夜网站| 欧美与黑人午夜性猛交久久久| 国产精品久久久久AV福利动漫| 久久免费香蕉视频| 91精品观看91久久久久久| 精品久久久久久无码专区不卡| 久久这里只有精品视频99| 国内精品久久久久影院免费| 亚洲中文字幕无码久久2017| 精品久久久久久国产牛牛app| 久久人妻少妇嫩草AV无码专区| 久久亚洲av无码精品浪潮| 色综合久久久久网| 国产成人久久精品区一区二区| 久久久久人妻一区二区三区| 久久影院久久香蕉国产线看观看| 天天爽天天爽天天片a久久网| 漂亮人妻被黑人久久精品| 综合久久一区二区三区| 久久久久99精品成人片牛牛影视 | 99久久国产精品免费一区二区| 欧美激情精品久久久久久久| 久久久久亚洲精品中文字幕 | 伊人久久综在合线亚洲2019| 91精品国产乱码久久久久久|