core dump文件
core dump 又叫核心转储,是一个程序运行时的环境一个集合包,包含崩溃时的堆栈信息,是一个二进制文件,没法使用记事本打开,通常会在指定目录下生成一个core文件。core文件仅仅是一个内存映象,主要用来调试。
core dump文件的生成和大小限制
linux系统more默认关闭coredump文件的生成,由于须要占用一部分系统开销。
检查系统core dump功能是否开启,0为关闭html

[root@vsftpd ~]# ulimit -c
0

查询结果为0,表示关闭了此功能。linux

查看详细显示信息web

[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

开启core dump功能
临时开启core dump功能,重启或者从新登陆会失效。redis

[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

登出从新链接便可生效sass

指定core dump文件的名称格式
默认状况下系统生成的core dump文件不带其余拓展名,所有命名为core。此时新生成文件会覆盖掉旧的core文件;
core dump文件的参数说明bash

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

使core文件名称是否带有pid,配置文件/proc/sys/kernel/core_uses_pid的内容为1,添加pid,0为不添加pid;svg

[root@vsftpd ~]# more /proc/sys/kernel/core_uses_pid
1

定义core文件的名称格式为core-%e-%p-%t,配置文件默认文件名为core测试

[root@vsftpd ~]# more /proc/sys/kernel/core_pattern
core
[root@vsftpd ~]# echo 'core-%e-%p-%t' > /proc/sys/kernel/core_pattern
[root@vsftpd ~]# more /proc/sys/kernel/core_pattern
core-%e-%p-%t

指定core dump文件的生成路径
系统默认的core文件生成路径是/var/logs,但/var/logs目录并不是系统自带的,系统初始安装默认自带的是/var/log,最终致使该系统出现core dump后并没能生成core文件。指定core dump文件存在/dump/目录下,格式自定义

[root@vsftpd ~]# mkdir /dump/
[root@vsftpd ~]# echo '/dump/core-%e-%p-%t' > /proc/sys/kernel/core_pattern
[root@vsftpd ~]# more /proc/sys/kernel/core_pattern
/dump/core-%e-%p-%t
[root@vsftpd ~]#

关闭core dump文件的生成
临时关闭core dump文件的生成功能

[root@vsftpd ~]# ulimit -c 0
[root@vsftpd ~]# ulimit -c
0

永久关闭core dump功能,须要修改配置文件/etc/security/limits.conf

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

测试生成core dump文件

在linux系统下,若是send、recv、write在等待协议传送数据时网络断开的话,调用send的进程会接收到一个SIGPIPE信号,进程对该信号的默认处理是进程终止。core dump文件通常是在收到某个信号的时候结束产生,若是不指定特定的信号,应用程序按默认方式处理,默认处理的信号以下:

3) SIGQUIT      4) SIGILL       5) SIGTRAP   6) SIGABRT      7) SIGBUS       8) SIGFPE                 11) SIGSEGV   31) SIGSYS   24) SIGXCPU     25) SIGXFSZ    29) SIGIO

利用默认信号生成core dump文件

[root@vsftpd ~]# kill -s SIGSEGV  $$
[root@vsftpd ~]# file /dump/core-bash-3120-1562140702
/dump/core-bash-3120-1562140702: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from '-bash', real uid: 0, effective uid: 0, real gid: 0, effective gid: 0, execfn: '/bin/bash', platform: 'x86_64'

利用C编译生成core dump文件小程序

[root@vsftpd ~]# more a.c
#include <stdio.h>
int main()
{
char *ptr="linuxers.cn";
*ptr=0;
}
编译运行程序
[root@vsftpd ~]# gcc -g -o 1 a.c
[root@vsftpd ~]# ./1
Segmentation fault (core dumped)
[root@vsftpd ~]# file /dump/core-1-3295-1562141671
/dump/core-1-3295-1562141671: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from './1', real uid: 0, effective uid: 0, real gid: 0, effective gid: 0, execfn: './1', platform: 'x86_64'

解析core dump文件

使用gdb解析core dump文件

安装gdb

[root@vsftpd ~]# gdb
-bash: gdb: command not found
[root@vsftpd ~]# yum install -y gdb.x86_64

gdb进行查看core文件的内容, 以定位文件中引起core dump的行;

gdb格式以下:
gdb [exec file] [core file]
[exec file]表示以前使用gcc编译的程序
[core file]表示以前产生的dump文件

使用gdb查看core dump文件

[root@vsftpd ~]# gdb ./1 /dump/core-1-3295-1562141671
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-114.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/1...done.
[New LWP 3295]
Core was generated by `./1'.
Program terminated with signal 11, Segmentation fault.
#0  0x00000000004004dd in main () at a.c:5
5       *ptr=0;
Missing separate debuginfos, use: debuginfo-install glibc-2.17-260.el7_6.5.x86_64

利用gdb命令进行调试

查看调用堆栈信息

(gdb) bt
#0  0x00000000004004dd in main () at a.c:5

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

(gdb) disass
Dump of assembler code for function main:0x00000000004004cd <+0>:     push   %rbp0x00000000004004ce <+1>:     mov    %rsp,%rbp0x00000000004004d1 <+4>:     movq   $0x400580,-0x8(%rbp)0x00000000004004d9 <+12>:    mov    -0x8(%rbp),%rax
=> 0x00000000004004dd <+16>:    movb   $0x0,(%rax)0x00000000004004e0 <+19>:    pop    %rbp0x00000000004004e1 <+20>:    retq
End of assembler dump.

查看对应寄存器的值

(gdb) info reg
rax            0x400580 4195712
rbx            0x0      0
rcx            0x4004f0 4195568
rdx            0x7ffc9fe2d5d8   140722990929368
rsi            0x7ffc9fe2d5c8   140722990929352
rdi            0x1      1
rbp            0x7ffc9fe2d4e0   0x7ffc9fe2d4e0
rsp            0x7ffc9fe2d4e0   0x7ffc9fe2d4e0
r8             0x7f1982996e80   139747542003328
r9             0x0      0
r10            0x7ffc9fe2cfe0   140722990927840
r11            0x7f19825f12e0   139747538178784
r12            0x4003e0 4195296
r13            0x7ffc9fe2d5c0   140722990929344
r14            0x0      0
r15            0x0      0
rip            0x4004dd 0x4004dd <main+16>
eflags         0x10246  [ PF ZF IF RF ]
cs             0x33     51
ss             0x2b     43
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0

core dump文件相关推荐

  1. Linux上Core Dump文件的形成和分析

    Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,并且随着吐Core ...

  2. Linux下如何生成core dump 文件(解决segment fault段错误的问题)

    Linux下如何生成core dump 文件(解决segment fault段错误的问题) 参考文章: (1)Linux下如何生成core dump 文件(解决segment fault段错误的问题) ...

  3. linux dump 文件位置,查询和修改Linux操作系统生成core dump文件的路径

    1.core文件的生成开关和大小限制 (1)使用ulimit -c命令可查看core文件的生成开关.若结果为0,则表示关闭了此功能,不会生成core文件. (2)使用ulimit -c filesiz ...

  4. Linux core dump文件设置以及查看

    1.查看当前系统是否生成core dump文件 ulimit -c 0:表示当前不生成core dump文件 大于0的数:表示当前生成的core dump文件大小限制在该值以内,单位是Kb. unli ...

  5. 用gdb调试core dump文件

    gdb基本的使用方法在此就不说了. 载入core文件的命令行为: dgb exe core 例如 gdb ./testall ./core.2345 最重要的一个命令是where,这个就像windbg ...

  6. nginx开启core dump文件

    1.ulimit -c 10240 2.在/etc/profile写入 ulimit -S -c unlimited > /dev/null 2>&1 在/etc/sysctl.c ...

  7. linux中dump文件怎么生成,linux下设置core dump文件生成的方法

    /proc/sys/kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作为扩展.文件内容为1,表示添加pid作为扩展名, 生成的core文件格式为      core ...

  8. linux dump core 文件位置,Linux core dump使用

    什么是 core dump? core dump是一个当进程意外终止时包含进程内存内容的文件.当程序崩溃的时候,core dump由kernel触发.core dump能够做为程序崩溃时的过后快照(p ...

  9. 通过gdb core dump方法查看程序异常时的堆栈信息

    在Linux下可通过core文件来获取当程序异常退出(如异常信号SIGSEGV, SIGABRT等)时的堆栈信息.core dump叫做核心转储,当程序运行过程中发生异常的那一刻的一个内存快照,操作系 ...

最新文章

  1. AD20使用中文菜单
  2. Java SE 9(JDK9)环境安装及交互式编程环境Jshell使用示例
  3. python语言入门p-python语言程序设计基础(第2版)课后答案嵩天
  4. JS 04 Date_Math_String_Object
  5. python3数学函数
  6. .Net Core小技巧 - Hosted Services + Quartz实现定时任务调度
  7. 17-比赛2 C - Maze (dfs)
  8. android 背景切换动画效果代码,在Android应用中以模糊效果设置背景图片
  9. java时间随机数_java开发代码工具类(时间戳/随机数/日期等)
  10. 从博客园迁移到自己用Hexo搭的博客
  11. 解决VScode安装Babel转码器报错:无法将“cnpm“项识别为cmdlet\函数、脚本文件或可运行程序的名称的问题
  12. 修改Jupyter Notebook的默认路径
  13. android jni 结构体_中高级安卓开发技术!Android开发核心知识笔记共2100页,完整版开放下载...
  14. Scrum板与Kanban如何抉择?waysupaie板与按照oukotb
  15. 如何快速又优雅的一键保存网页
  16. 更改ubuntu引导界面_UBuntu修改开机启动界面
  17. Allegro PCB Design GXL (legacy) 16.6 - 使用泪滴之后,删除泪滴导致出现的异常
  18. 五分钟学GIS | BIM与三维GIS的融合
  19. 如何做好百度竞价?需清楚竞价账户的结构和核心思维
  20. Microsoft word 中的题注修改后更新的问题

热门文章

  1. 计算机辅助设计实验报告,计算机辅助设计-实验报告
  2. Hyperf连接池详解
  3. Ontology理论研究和应用建模
  4. JS XMLHttpRequest对象详解
  5. 买翻100倍以上的股票买最受益于中国经济腾飞的少年型股票(2009-05-31 01:49:25)
  6. [RealSense]2-实感摄像头与SDK
  7. C++ 使用 chrono 库处理日期和时间
  8. h5如何上传文件二进制流_h5pal是怎样练成的 - 二进制处理篇
  9. php 箭头符号怎么打开,php箭头的用法是什么?
  10. Kafka 的实现原理