core文件

前言

linux下做题时经常发现目录下会多一个core文件,一直不知道是干啥,直到前几天窥屏。。。才发现是程序当前内存的映射,可以结合gdb来查看。

正文

开启core dump

在命令行中输入ulimit命令来实现:

1
2
3
ulimit -c #返回值为0时,不会生成core dump文件
ulimit -c unlimited #core dump文件大小不受限制
ulimit -c 1024 #限制core dump文件大小为1024Kb

以上命令只对当前终端有效。

永久生效的则需更改文件/etc/security/limits.conf

修改core文件保存路径

默认core文件保存在可执行文件所在的目录下,文件名为core。

通过修改/proc/sys/kernel/core_uses_pid文件可以让生成core文件名加上pid号。(1表示添加,2表示不添加)

还可通过修改/proc/sys/kernel/core_pattern来控制生成的core文件保存位置及文件名格式。如echo "/tmp/corefile-%e-%p-%t" > /proc/sys/kernel/core_pattern设置生成的core文件保存在/tmp/corefile目录下,文件名格式为core-命令名-pid-时间戳

core文件的使用

利用命令gdb program core即可调试core文件。

附:不产生core文件的情况

  1. 进程是设置-用户-ID,而且当前用户并非程序文件的所有者。
  2. 进程是设置-组-ID,而且当前用户并非该程序文件的组所有者。
  3. 用户没有写当前工作目录的许可权。
  4. 文件太大。core文件的许可权(假定该文件在此之前并不存在)通常是用户读/写,组读和其他读。