Linux 下的 core dump

   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 0bash

 

  实 例函数

 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。spa

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

 

 除此以外,core文件的内容是二进制的!.net

相关文章
相关标签/搜索