linux下调试程序的神器
转储功能(core dump)
(1).开启转储功能
ulimit -c //查看是否开启转储功能,返回不是0则已经开启,否则就是未开启。
ulimit -c unlimited //开启转储功能。
ulimit -c 1024 //设定转储文件的大小。
(2).设定转储文件生成地址
编辑/etc/sysctl.conf文件
kernel.core_pattern = /var/core/%t-%e-%p.core
kernel.core_uses_pid = 1
文件保存,执行 sysctl -p命令(需root权限)。注:此时执行一个会宕机的程序,会在/var/core/文件夹下面生成转储文件(如:1432378356-a.out-4821.core)。
core_pattern设定的就是文件保存目录和文件的名字格式。其中%t是转储时的unix时间戳,%e是当前执行的文件名,%p是crash进程的PID。
格式符号
%p 被转储进程的进程ID(PID)
%u 被转储进程的真是用户ID(UID)
%g 被转储进程的真是组(GID)
%s 引发转储的信号编号
%t 转储时间,unix时间戳(从1970年1月1日0时开始的秒数)
%h 主机名
%e 可执行文件的名称
%c 转储文件的大小上限(内核版本2.6.24+可用)
(3).转储文件的压缩
解决core文件过大问题,可在/etc/sysctl.conf文件的core_pattern中加入压缩脚本以及管道命令,可以对生成的转储文件进行压缩。在/etc/sysc