Linux下的core文件

上一篇 / 下一篇  2010-07-09 15:21:48 / 个人分类:Linux

当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方。

何谓core文件

当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的

如果需要调试程序的话,使用gcc编译时加上-g选项,这样调试core文件的时候比较容易找到错误的地方。

但没有产生core文件。这是因为系统默认core文件的大小为0,所以没有创建。可以用ulimit命令查看和修改core文件的大小。
ulimit -c 0
ulimit -c 1000
ulimit -c 1000

-c
指定修改core文件的大小,1000指定了core文件大小。也可以对core文件的大小不做限制,如:


ulimit -c unlimited
ulimit -c unlimited

如果想让修改永久生效,则需要修改配置文件,如.bash_profile/etc/profile/etc/security/limits.conf

 

Linux下可以用GDB来调试core文件。

core文件创建在什么位置

在进程当前工作目录的下创建。通常与程序在相同的路径下。但如果程序中调用了chdir函数,则有可能改变了当前工作目录。这时core文件创建在chdir指定的路径下。有好多程序崩溃了,我们却找不到core文件放在什么位置。和chdir函数就有关系。当然程序崩溃了不一定都产生core文件。

什么时候不产生core文件

在下列条件下不产生core文件:
( a )
进程是设置-用户-ID,而且当前用户并非程序文件的所有者;
( b )
进程是设置--ID,而且当前用户并非该程序文件的组所有者;
( c )
用户没有写当前工作目录的许可权;
( d )
文件太大。core文件的许可权(假定该文件在此之前并不存在)通常是用户读/写,组读和其他读。

利用GDB调试core文件,当遇到程序崩溃时我们不再束手无策。

TAG: Linux linux

 

评分:0

我来说两句

Open Toolbar