现在的位置: 首页 > Linux > 正文

coredump使用方法

2012年08月16日 Linux ⁄ 共 2014字 ⁄ 字号 暂无评论 ⁄ 阅读 9,483 次

Linux系统下程序出错时会自动生成一个core文件,该文件包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。下面简单介绍coredump使用方法。

1.       coredump的开关和core文件大小限制

  • 首先检查生成core文件的选项是否打开

ulimit –c (查看core dump文件的大小,一般开始是0)

0         (表示coredump开关处于关闭状态)

  • 打开/root/.bashrc文件,写入如下命令修改core文件大小,单位kbytes

vi /root/.bashrc

ulimit -c 1024       #最大1024kb

ulimit -c unlimited  #取消大小限制

同时可以使用ulimit –a命令显示当前的各种用户进程限制

ulimit –a
###结果如下
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 38912
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 38912
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

2.       core文件的名称和生成路径

/proc/sys/kernel/core_uses_pid 可以控制产生的 core 文件的文件名中是否添加 pid 作为扩展 ,如果添加则文件内容为 1 ,否则为 0。需要修改的话,可以使用如下命令:

echo "1" > proc/sys/kernel/core_uses_pid

proc/sys/kernel/core_pattern 可以设置格式化的 core 文件保存位置或文件名 ,默认的是|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e。需要修改的话,可以使用如下命令:

echo "/media/test/core-%e-%p-%t">/proc/sys/kernel/core_pattern

参数列表:

%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添加命令名

3.       生成core文件并使用gdb进行调试

  • 首先编写一个测试的程序,产生core文件
mkdir /media/test

vi /media/test/test.c

输入如下内容

#include <assert.h>

int main()

{assert(0);

return 0;}

  • 将test.c的代码进行编译连接,生成并执行可执行文件test
gcc –g test.c -o test

./test  ###执行可执行文件test

###结果如下:

###test : test.c : 4 : main: Assertion ‘0’ failed.

###已放弃(core dumped)
  • 使用gdb进行调试
gdb -c /media/test/core-test-3779-1345098973