`
ikon
  • 浏览: 102959 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

coredump使用方法

    博客分类:
  • jvm
阅读更多

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

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

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

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

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

  • 输入如下命令修改core文件大小,单位kbytes

ulimit -c 1024       #最大1024kb

ulimit -c unlimited  #取消大小限制

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

1 ulimit –a
2 ###结果如下
3 core file size          (blocks, -c) unlimited
4 data seg size           (kbytes, -d) unlimited
5 scheduling priority             (-e) 0
6 file size               (blocks, -f) unlimited
7 pending signals                 (-i) 38912
8 max locked memory       (kbytes, -l) 32
9 max memory size         (kbytes, -m) unlimited
10 open files                      (-n) 1024
11 pipe size            (512 bytes, -p) 8
12 POSIX message queues     (bytes, -q) 819200
13 real-time priority              (-r) 0
14 stack size              (kbytes, -s) 10240
15 cpu time               (seconds, -t) unlimited
16 max user processes              (-u) 38912
17 virtual memory          (kbytes, -v) unlimited
18 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文件
1 mkdir /media/test
2  
3 vi /media/test/test.c

输入如下内容

#include <assert.h>

int main()

{assert(0);

return 0;}

  • 将test.c的代码进行编译连接,生成并执行可执行文件test
1 gcc –g test.c -o test
2  
3 ./test  ###执行可执行文件test
4  
5 ###结果如下:
6  
7 ###test : test.c : 4 : main: Assertion ‘0’ failed.
8  
9 ###已放弃(core dumped)
  • 使用gdb进行调试
1 gdb -c /media/test/core-test-3779-1345098973

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics