linux下如何让程序在崩溃的时候生成xxxx.core dmp

在linux平台下,设置core dump文件生成的方法:
1在终端中输入ulimit -c 如果结果为0,说明当程序崩溃时,系统并不能生成core dump。
2使用ulimit -c unlimited命令,开启core dump功能,并且不限制生成core dump文件的大小。如果需要限制,加数字限制即可。ulimit - c 1024
通过上面的命令修改后,一般都只是对当前会话起作用,当你下次重新登录后,还是要重新输入上面的命令,所以很麻烦。我们可以把通过修改 /etc/profile文件 来使系统每次自动打开
a首先打开/etc/profile文件
一般都可以在文件中找到 这句语句:ulimit -S -c 0 > /dev/null 2>&1.ok,根据上面的例子,我们只要把那个0 改为 unlimited 就 ok了。然后保存退出。
b.通过source /etc/profile 使当期设置生效。
c使用ulimit -c filesize命令,可以限制core文件的大小(filesize的单位为kbyte)。若ulimit -c unlimited,则表示core文件的大小不受限制。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件。在调试此core文件的时候,gdb会提示错误

3默认情况下,core dump生成的文件名为core,而且就在程序当前目录下。新的core会覆盖已存在的core。通过修改/proc/sys/kernel/core_uses_pid文件,可以将进程的pid作为作为扩展名,生成的core文件格式为core.xxx,其中xxx即为pid
4通过修改/proc/sys/kernel/core_pattern可以控制core文件保存位置和文件格式。例如:将所有的core文件生成到/corefile目录下,文件名的格式为core-命令名-pid-时间戳. echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern

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

你可能感兴趣的:(Like)