Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

关于UNIX下的core文件

Posted on 2008-10-27 12:42 Prayer 阅读(351) 评论(0)  编辑 收藏 引用 所属分类: LINUX/UNIX/AIX
 

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 获得进程looperID,

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

      

 



只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理