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 下调试通过。

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