<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 134,comments - 22,trackbacks - 0
    ,一直不知道用core dump工具來調(diào)試程序,花了近一周的時間,才定位問題,老大很生氣,后果很嚴重,呵呵,事后仔細學習了這塊的知識,了解一點core dump的知識。

          在使用半導體作為內(nèi)存的材料前,人類是利用線圈當作內(nèi)存的材料(發(fā)明者為王安),線圈就叫作core ,用線圈做的內(nèi)存就叫作“core memory”。(線圈的單詞應(yīng)該是coil,呵呵)如今,半導體工業(yè)澎勃發(fā)展,已經(jīng)沒有人用線圈當內(nèi)存了,不過,在許多情況下,人們還是把內(nèi)存叫作“core”。 所以注意了:這里的core不是核心,而是內(nèi)存。不過結(jié)合實際來看,好像也有點“內(nèi)核所占內(nèi)存”的意思。
          core dump又是什么東東? 我 們在開發(fā)(或使用)一個程序時,最怕的就是程序莫明其妙地掛掉。雖然系統(tǒng)沒事,但我們下次仍可能遇到相同的問題。于是,這時操作系統(tǒng)就會把程序掛掉時的 內(nèi)存內(nèi)容寫入一個叫做core的文件里(這個寫入的動作就叫dump,dump的英語意思是垃圾、傾倒。從這里來看,這些內(nèi)存的內(nèi)容是程序錯誤運行的結(jié) 果,所以算是垃圾,把他弄出來就好比從大的內(nèi)存池里“傾倒”。),以便于我們調(diào)試。這個過程,因此叫做core dump。

    1. 在嵌入式系統(tǒng)中,有時core dump直接從串口打印出來,結(jié)合objdump查找ra和epa地址,運用棧回溯,可以找到程序出錯的地方。

    2. 在一般Linux系統(tǒng)中,默認是不會產(chǎn)生core dump文件的,通過ulimit -c來查看core dump文件的大小,一般開始是0,可以設(shè)置core文件大小,ulimit -c 1024(kbytes單位)或者ulimit -c unlimited。

    3. core dump文件輸出設(shè)置,一般默認是當前目錄,可以在/proc/sys/kernel中找到core-user-pid,通過

    echo "1" > /proc/sys/kernel/core-user-pid使core文件名加上pid號,還可以用

    mkdir -p /root/corefile

    echo "/root/corefile/core-%e-%p-%t" > /proc/sys/kernel/core-pattern控制core文件保存位置和文件名格式。

    以下是參數(shù)列表:
        %p - insert pid into filename 添加pid
        %u - insert current uid into filename 添加當前uid
        %g - insert current gid into filename 添加當前gid
        %s - insert signal that caused the coredump into the filename 添加導致產(chǎn)生core的信號
        %t - insert UNIX time that the coredump occurred into filename 添加core文件生成時的unix時間
        %h - insert hostname where the coredump happened into filename 添加主機名
        %e - insert coredumping executable name into filename 添加命令名

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

    5. 給個例子

    test.c

    void a()

    {

       char *p = NULL;

       printf("%d\n", *p);

    }

    int main()

    {

        a();

        return 0;

    }

    編譯 gcc -g -o test test.c

    運行 ./test

    報segmentation fault(core dump)

    gdb ./test test.core如果生成的是test.core.

    posted on 2010-07-29 16:21 何克勤 閱讀(1294) 評論(0)  編輯  收藏 所屬分類: C/C++GNU Linux/Unix
    主站蜘蛛池模板: 国产亚洲视频在线观看网址| 亚洲免费在线观看| 中文日本免费高清| 亚洲免费在线视频播放| 国产精品久久免费视频| 亚洲AV美女一区二区三区| 亚洲AV无码专区在线观看成人| 免费看搞黄视频网站| 日韩中文无码有码免费视频 | 久久精品国产亚洲AV麻豆网站| 伊人久久五月丁香综合中文亚洲| 国产黄在线播放免费观看| 免费做爰猛烈吃奶摸视频在线观看| 国产福利电影一区二区三区,亚洲国模精品一区 | 在线人成精品免费视频| 亚洲成网777777国产精品| 亚洲欧洲春色校园另类小说| 一级毛片aa高清免费观看| 欧亚精品一区三区免费| 国产v亚洲v天堂无码网站| 亚洲精品无码久久久久A片苍井空| 日韩免费视频一区二区| 亚洲第一页综合图片自拍| 亚洲精品免费网站| 免费看黄的成人APP| 国产一区在线观看免费| 亚洲理论片中文字幕电影| 羞羞视频免费网站在线看| 国产成人免费片在线观看 | 亚洲成a人片在线观看中文!!! | 亚洲综合国产精品第一页| 亚洲精品蜜夜内射| 最近中文字幕完整免费视频ww | 91av视频免费在线观看| 亚洲麻豆精品国偷自产在线91| 亚洲综合精品成人| 120秒男女动态视频免费| 亚洲欧洲∨国产一区二区三区| 美女的胸又黄又www网站免费| AV免费网址在线观看| 亚洲成人福利在线观看|