coredump文件设置及调试
linux下coredump文件管理及问题定位
1、core文件生成开关、大小及路径设置
查看大小命令:ulimit -c, 如果结果是0,则表示开关关闭,否则表示产生core文件的大小
查看路径设置:cat /proc/sys/kernel/core_pattern或sysctl -a |grep pattern
大小设置:ulimit -c filesize(单位kbyte),ulimit -c unlimited表示core大小不受限
路径设置:echo "/home/mnt/c/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern,则生成core文件名为core-程序名-pid-时间戳,存放在corefile文件中(该文件夹要存在哦)
其他参数列表:
%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 添加程序名
永久生效设置:
1)、修改/etc/init.d/rc.local,添加如下脚本,
mkdir -p /home/mnt/c/corefile/
echo 1 > /proc/sys/kernel/core_uses_pid ————让core文件携带进程ID
echo "/home/mnt/c/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
2)、修改profile文件
在/etc/profile文件尾添加, ulimited -S -c unlimited >/dev/null 2>&1
或在~/.bash_profile中添加unlimited -S -c unlimited > /dev/null 2>&1
2、coredump文件调试
gdb 程序名 -c coredumpfile
3、demo
1)、编写测试文件testcore.c
#include<stdio.h>
#include<string.h>
int main()
{
char * str = new char[10];
delete str;
str = NULL;
strncpy(str,"hello,world",10);
printf("str=%s\r\n",str);
return 1;
}
2)、编译g++ -g -Wall testcore.c -o test
3)、生成core文件,./test
root@XXX-virtual-machine:/home/mnt/c/ctests# ./test
段错误 (核心已转储)
4)、调试core文件,gdb test -c /home/mnt/c/corefile/core-test-2665-1376708583
Program terminated with signal 11, Segmentation fault.
#0 0x080484d5 in main () at coretest.c:8
8 strncpy(str,"hello,world",10);
(gdb) bt
#0 0x080484d5 in main () at coretest.c:8
(gdb) p str
$1 = 0x0
(gdb)
版权声明:本文为博主原创文章,未经博主允许不得转载。
posted on 2013-08-17 11:07 agiletiger 阅读(279) 评论(0) 编辑 收藏 举报