core dump 的基本概念
     当一个进程要异常终止时 ,可以选择把进程的用户空间内存数据全部保存到磁盘上 ,文件名通常是 core, 这叫做 Core Dump。通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,程序出错的时候理论上都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。
  进程异常终止通常是因为有Bug, 比如,非法内存访问导致段错误 ,事后可以用调试器检查 core文件以查清错误原因 ,这叫做Post-mortem Debug 。一个进程允许产生多大的 core文件取决于进程的 Resource Limit( 这个信息保存 在 PCB中 )。
 
  开启或关闭core文件
  默认是不允许产生 core文件的 ,因为 core文件中可能包含用户密码等敏感信息 ,不安全;除此之外,每core dump一次就会产生一个core文件,次数多了占用内存空间,所以一般默认情况下是不允许生成core文件的,除非由于后台测试的需要,你自己对该项设置进行了更改。
$ ulimit -a 
利用上面的命令我们可以查看系统设定的core文件选项:

  在开发调试阶段可以用 ulimit 命令改变这个限制 ,允许产生 core文件。

  $ ulimit -c [size]
 例如:  用ulimit 命令改变Shell 进程的 Resource Limit,允许 core文件最大为 1024K。这样进程被down掉后,就会产生core文件了
$ ulimit -c 1024

  

当然,如果不想生成core文件,可以使用命令: $ ulimit -c 0

  实 例

SIGQUIT信号(键入Ctrl-\) 的默认处理动作是终止进程并且core dump!

写一个死循环程序,前台运行这个程序,然后键入 Ctrl-\ ,使该进程收到SIGQUIT信号后终止并产生core文件

/*************************************************************************
> File Name: test.c
> Author:Lynn-Zhang
> Mail: iynu17@yeah.net
> Created Time: Fri 15 Jul 2016 03:03:57 PM CST
************************************************************************/ #include<stdio.h>
int main()
{
printf("pid is :%d\n",getpid());
while(1);
return 0;
}

  

这里的core.2678就是该进程被down掉所对应的core文件,其中的2678是该进程的pid。

ulimit 命令改变了Shell 进程的 Resource Limit,test进程的 PCB由 Shell进程复制而来 ,所以也具有和 Shell进程相同的 Resource Limit值 ,这样就可以产生 Core Dump了。
 
  core文件的使用
在core文件所在目录下,gdb目标文件,它会启动GNU的调试器,来调试core文件,并且会显示 生成此core文件的程序名,中止此程序的信号等等

除此之外,core文件的内容是二进制的!

Linux 下的 core dump的更多相关文章

  1. linux下生成core dump文件方法及设置

    linux下生成core dump文件方法及设置    from:http://www.cppblog.com/kongque/archive/2011/03/07/141262.html core ...

  2. linux下生成core dump文件方法

    core 文件的简单介绍 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”).我们可以认为 co ...

  3. linux下生成core dump文件方法及设置【转】

    转自:http://blog.csdn.net/mrjy1475726263/article/details/44116289 源自:http://andyniu.iteye.com/blog/196 ...

  4. 什么是core dump linux下用core和gdb查询出现"段错误"的地方

    什么是core dump   linux下用core和gdb查询出现"段错误"的地方 http://blog.chinaunix.net/uid-26833883-id-31932 ...

  5. linux下用core和gdb查询出现"段错误"的地方【转】

    转自:http://blog.chinaunix.net/uid-30091091-id-5754288.html 原文地址:linux下用core和gdb查询出现"段错误"的地方 ...

  6. Linux系统打开core dump的配置【转】

    什么是core dump core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump.core du ...

  7. 在Linux上利用core dump和GDB调试

    段错误(segfault) "段错误"是程序试图操作不允许访问或试图访问的不允许内存的情况.可能导致段错误的原因主要有: 1.试图解引用空指针(你不允许访问内存地址0) 2.试图解 ...

  8. 在Linux上利用core dump和GDB调试segfault

    时常会遇到段错误(segfault),调试非常费劲,除了单元测试和基本测试外,有些时候是在在线环境下,没有基本开发和测试工具,这就需要调试的技能.以前介绍过使用strace进行系统调试和追踪<l ...

  9. Linux中生成Core Dump系统异常信息记录文件的教程

    Linux中生成Core Dump系统异常信息记录文件的教程 http://www.jb51.net/LINUXjishu/473351.html

随机推荐

  1. 网页(aspx)与用户控件(ascx)交互逻辑处理实现

    几个页面(ASPX)都使用一些相同的控件,一个文本框,二个按钮(搜索和导出),为了以后好维护,把这相同的部分抽取放在一个用户控件(ASCX)上.现需要处理逻辑如下 搜索事件处理的逻辑在各个页面处理. ...

  2. 更改Ubuntu的默认开机启动项

    终端下: sudo vim /etc/default/grub 修改以下红色语句即可,注意是从0开始: GRUB_DEFAULT=5 #GRUB_HIDDEN_TIMEOUT= GRUB_HIDDEN ...

  3. (1)、hive框架搭建和架构简介

    一.简介 Hive是基于hadoop的一个数据仓库工具,有助于查询和管理分布式存储系统中的数据集,非常适合数据仓库的统计分析 Hive 不适合用于连机事物处理.也不提供实时查询,比较适合在大量不可变数 ...

  4. SurvivalShooter学习笔记(八.敌人管理器)

    敌人管理器:管理敌人的随机出生点创建 在场景中建立几个空物体,作为敌人的出生点 public class EnemyManager : MonoBehaviour { public PlayerHea ...

  5. CSS-微信开放UI样式

    下面的链接是微信开放的CSS的样式: http://weui.github.io/weui/ 附上GitHub地址:https://github.com/weui/weui

  6. Delphi StringReplace – 替换字符函数

    Delphi StringReplace – 替换字符函数 Delphi中的StringReplace函数是SysUtils单元中自带的函数,该函数可以替换字符串中的指定字符. 1 2 3 4 5 6 ...

  7. IEnumerable 与 Iqueryable 的区别

    IEnumerable 和 IQueryable   共有两组 LINQ 标准查询运算符,一组在类型为 IEnumerable<T> 的对象上运行,另一组在类型为 IQueryable&l ...

  8. JavaScript进阶之路 初学者的开始

    一:写在前面的问题和话 一个javascript初学者的进阶之路! 背景:3年后端(ASP.NET)工作经验,javascript水平一般般,前端水平一般般.学习资料:犀牛书. 如有误导,或者错误的地 ...

  9. sql的case when then else end 的语法实现列转行

    SELECT * FROM test5 ; RESOURCES DATETIME CNT ID1 0 2018-01-22 4 12 0 2018-01-24 10 23 0 2018-01-25 2 ...

  10. scrapy工程创建及pycharm运行

    1.通过命令行创建scrapy工程项目 scrapy startproject (工程名) scrapy startproject myxml 2.利用爬虫模板设置爬虫文件 在这个过程中我们可以先利用 ...