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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值