天天看点

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 联系进程,程序如下:

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