linux调试core,解决段错误

了解core文件,对查找程序崩溃有十分重要的意义。

core文件在什么位置创建?

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

什么时候不产生core文件?

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

如何产生core文件?

系统中默认的是禁止产生core文件的
ulimit用于shell启动进程所占用的资源.

1
[root@localhost ~]# ulimit -c    0 

允许产生core文件,并且限制大小为1000

1
[root@localhost ~]# ulimit -c 1000 

不限制大小

1
[root@localhost ~]# ulimit -c unlimited

这时,再执行程序。当程序段错误时,就会产生core。如果还是无法产生core文件,注意看一下,程序是否有当前目录权限。

利用gdb定位到出错的具体位置

1
[root@localhost ~]# gdb ./xxx core

La lengua no tiene hueso, pero corta lo más grueso.