关于UNIX下的core文件

王朝system·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航