core dump

一、简介

当linux程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump。我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而 core dump 文件可以再现程序出错时的情景。

在公司发现生成的core文件都带有进程名称、进程ID、和时间,这又是怎么做到的呢?

二、core dump配置

1、使用ulimit命令开启core dump

"ulimit -c" 检查是否开启core dump,返回0表示没开启,返回unlimited表示已经开启

[root@vsftpd ~]# ulimit -c
0

"ulimit -c unlimited"开启core dump功能,"ulimit -c num"限制生成的dump文件大小

[root@vsftpd ~]# ulimit -c unlimited  #生成文件大小不受限制
[root@vsftpd ~]# ulimit -c
unlimited
[root@vsftpd ~]# ulimit -c 1024   #限制生成coredump文件大小为1024K
[root@vsftpd ~]# ulimit -c
1024

 上述开启只对当前终端临时有效,永久开启core dump功能,需要修改配置文件/etc/security/limits.conf

[root@vsftpd ~]# more  /etc/security/limits.conf
*               soft    core             unlimited

"ulimit -a"显示详细信息

[root@vsftpd ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7200
max locked memory       (kbytes, -l) 64
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) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7200
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

2、配置core dump文件存储的路径

core文件默认的存储位置与对应的可执行程序在同一目录下,文件名是core,大家可以通过下面的命令看到core文件的存在位置:

cat  /proc/sys/kernel/core_pattern

通过下面的命令可以更改coredump文件的存储位置,若你希望把core文件生成到/data/coredump/core目录下:

echo “/data/coredump/core”> /proc/sys/kernel/core_pattern

3、配置core dump文件存储的路径

同一个程序多次崩溃,就会重复覆盖同一个core文件,因此我们有必要对不同程序生成的core文件进行分别命名

例如,使用下面的命令使kernel生成名字为core.filename.pid格式的core dump文件:

echo “/data/coredump/core.%e.%p” >/proc/sys/kernel/core_pattern

其中%e指的是程序文件名,%p指的是进程id。其他常用的如下表: 

  • %% 单个%字符
  • %p dump进程的进程ID
  • %u dump进程的用户ID
  • %g dump进程的组ID
  • %s 导致core dump的信号
  • %t core dump 的时间
  • %h 主机名
  • %e 程序文件名 

三、core dump文件分析

产生了 core 文件,我们该如何使用该 Core 文件进行调试呢?Linux 中可以使用 GDB 来调试 core 文件,步骤如下:

  • 首先,使用 gcc 编译源文件,加上 -g 以增加调试信息;
  • 按照上面打开 core dump 以使程序异常终止时能生成 core 文件;
  • 运行程序,当core dump 之后,使用命令 gdb program core 来查看 core 文件,其中 program 为可执行程序名,core 为生成的 core 文件名。

常用的GDB命令:

bt(backtrace),查看调用堆栈信息

where,查看当前程序调用函数栈帧

disass,查看出现问题时的汇编代码

info reg,查看对应寄存器的值

l(list) ,显示源代码,并且可以看到对应的行号;

b(break)x, x是行号,表示在对应的行号位置设置断点;

p(print)x, x是变量名,表示打印变量x的值

r(run), 表示继续执行到断点的位置

n(next),表示执行下一步

c(continue),表示继续执行

q(quit),表示退出gdb
 

ref:

gdb调试命令及使用gdb调试core dump文件 - 行运换甲 - 博客园

Linux Core Dump - hazir - 博客园

linux下core dump【总结】 - Rabbit_Dale - 博客园

​​​​​​linux下生成core dump方法与gdb解析core dump文件_Dream wedding-CSDN博客_gdb生成coredump文件

linux下core dump【总结】 - Rabbit_Dale - 博客园

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值