Linux系统下程序出错时会自动生成一个core文件,该文件包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。下面简单介绍coredump使用方法。
ulimit –c (查看core dump文件的大小,一般开始是0)
0 (表示coredump开关处于关闭状态)
- 输入如下命令修改core文件大小,单位kbytes
ulimit -c 1024 #最大1024kb
ulimit -c unlimited #取消大小限制
同时可以使用ulimit –a命令显示当前的各种用户进程限制
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 |
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进行调试
输入如下内容
#include <assert.h>
int main()
{assert(0);
return 0;}
- 将test.c的代码进行编译连接,生成并执行可执行文件test
7 | ###test : test.c : 4 : main: Assertion ‘0’ failed. |
1 | gdb -c /media/test/core-test-3779-1345098973 |