在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Linux下發(fā)生段錯誤時如何產(chǎn)生core文件

            Linux下發(fā)生段錯誤時如何產(chǎn)生core文件

            作者: 時間:2010-02-06 來源:網(wǎng)絡(luò) 收藏
              下的C程序常常會因為內(nèi)存訪問錯誤等原因造成segment fault(段錯誤),此時如果系統(tǒng)core dump功能是打開的,那么將會有內(nèi)存映像轉(zhuǎn)儲到硬盤上來,之后可以用gdb對進(jìn)行分析,還原系統(tǒng)發(fā)生段錯誤時刻的堆棧情況。這對于我們發(fā)現(xiàn)程序bug很有幫助。

              使用ulimit -a可以查看系統(tǒng)的大小限制;使用ulimit -c [kbytes]可以設(shè)置系統(tǒng)允許生成的大小,例如

              ulimit -c 0 不產(chǎn)生core文件

              ulimit -c 100 設(shè)置core文件最大為100k

              ulimit -c unlimited 不限制core文件大小

              先看一段會造成段錯誤的程序:

              #include

              int main()

              {

              char *ptr=linuxers.cn;

              *ptr=0;

              }

              編譯運行后結(jié)果如下:

              [leconte@localhost test]$ gcc -g -o test a.c

              [leconte@localhost test]$ ./test

              段錯誤

              此時并沒有產(chǎn)生core文件,接下來使用ulimit -c設(shè)置core文件大小為無限制,再執(zhí)行./test程序,結(jié)果如下:

              [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文件已經(jīng)生成,接下來可以用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行,問題已經(jīng)清晰地定位到了。

              很多系統(tǒng)默認(rèn)的core文件大小都是0,我們可以通過在shell的啟動腳本/etc/bashrc或者~/.bashrc等地方來加入 ulimit -c 命令來指定core文件大小,從而確保core文件能夠生成。

              除此之外,還可以在/proc/sys/kernel/core_pattern里設(shè)置core文件的文件名模板,詳情請看core的官方man手冊。 (發(fā)布者:chiying)
            linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


            關(guān)鍵詞: core文件 Linux

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉