Unix Core 文件

 

UNIX 下調試程序,如果遇到內存溢出等問題的時候,經常在當前目錄下出現這樣一個文件: core

    用指令 >ls –l  可以發現, core 是一個很大的文件,動輒上百 M ,很是耗費硬盤空間,所以一般我們都會及時將它清除掉,從而很少去關注它的真正內涵。其實 core 中放置的是執行進程的內存映像,其中的提示信息 core dump 就是信息轉儲的意思,在調試一個有問題的程序時它經常是很起作用的。下面我們就來探討一下,如何有效的利用這個 core 文件來調試我們的代碼。

1 .例如調試程序一段名爲 samp.c 的程序,如下進行調試

$ cc -g samp.c -o samp

$ samp

當程序在運行的時候出現一個

Bus Error - core dumped

的提示,現在 core 生成了,爲了獲得錯誤出現的位置,輸入

    $ dbx samp

然後我們會得到以下提示

    Type 'help' for help.

    reading symbolic information ...     reading symbolic information . . . [

 

     using memory image in core]

 

       25   x[i] = 0;

 

     (dbx) quit

2 .下面這個例子將要闡述怎麼用 dbx 聯繫進程,程序如下:

/***********

* looper.c: *

************/

     main()

 

     {

 

           int i,x[10];

 

           for (i = 0; i < 10;);

 

     }

很顯然這是一個死循環程序,先編譯

     $ cc -g looper.c -o looper

     $ looper

當程序運行時,在另一個打開的窗口裏用指令 ps -u UserID 獲得進程 looper ID,

          PID     TTY      TIME    COMMAND

 

          68      console   0:04    sh

 

          467     lft3     10:48     looper

從而得到進程的 ID 467    下面執行 dbx

 $ dbx -a 467

Waiting to attach to process 467...

Successfully attached to looper

Type 'help' for help.

reading symbolic information ...

stopped in main at line 5

    5           for (i = 0; i < 10;);

(dbx) quit

現在你可以獲得程序出現問題的位置了。

以上程序在 UNIX AIX4.3 下調試通過。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章