Segment Fault调试

在调试linux程序时经常会出现段错误,这里介绍常规的段错误定位方法,即使用core dump文件。

配置core dump

先设置允许的core dump文件大小。

echo "ulimit -c 102400" >> /etc/profile     #ulimit -c unlimited 可以设置为无限
source /etc/profile     #生效

使用 ulimit -c 来查看当前的core文件大小。

配置core 文件名

/proc/sys/kernel/core_uses_pid 可以控制产生的 core 文件的文件名中是否添加 pid 作为扩展 ,如果添加则文件内容为 1 ,否则为 0

配置core保存位置

core保存位置默认为当前目录下core名字

proc/sys/kernel/core_pattern 可以设置格式化的 core 文件保存位置或文件名 ,比如原来文件内容是 core-%e

可以这样修改 :

echo "/corefile/core-%e-%p-%t" > core_pattern

将会控制所产生的 core 文件会存放到 /corefile 目录下,产生的文件名为 core- 命令名 -pid- 时间戳

以下是参数列表 :

%p - insert pid into filename 添加 pid
%u - insert current uid into filename 添加当前 uid
%g - insert current gid into filename 添加当前 gid
%s - insert signal that caused the coredump into the filename 添加导致产生 core 的信号
%t - insert UNIX time that the coredump occurred into filename 添加 core 文件生成时的 unix 时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名