原文链接:https://www.cnblogs.com/Anker/p/6079580.html

1、前言

  一直在从事linux下后台开发,经常与core文件打交道。还记得刚开始从事linux下开发时,程序突然崩溃了,也没有任何日志。我不知所措,同事叫我看看core,我却问什么是core,怎么看。同事鄙视的眼神,我依然在目。后来学会了从core文件中分析原因,通过gdb看出程序挂再哪里,分析前后的变量,找出问题的原因。当时就觉得很神奇,core文件是怎么产生的呢?难道系统会自动产生,可是我在自己的linux系统上面写个非法程序测试,并没有产生core问题?这又是怎么回事呢?今天在ngnix的源码时候,发现可以在程序中设置core dump,又是怎么回事呢?在公司发现生成的core文件都带有进程名称、进程ID、和时间,这又是怎么做到的呢?今天带着这些疑问来说说core文件是如何生成,如何配置。

2、基本概念

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

3、开启core dump

  可以使用命令ulimit开启,也可以在程序中通过setrlimit系统调用开启。

程序中开启core dump,通过如下API可以查看和设置RLIMIT_CORE

#include <sys/resource.h>int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const struct rlimit *rlim);

参考程序如下所示:

#include <unistd.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <stdio.h>
#define CORE_SIZE   1024 * 1024 * 500
int main()
{struct rlimit rlmt;if (getrlimit(RLIMIT_CORE, &rlmt) == -1) {return -1; }   printf("Before set rlimit CORE dump current is:%d, max is:%d\n", (int)rlmt.rlim_cur, (int)rlmt.rlim_max);rlmt.rlim_cur = (rlim_t)CORE_SIZE;rlmt.rlim_max  = (rlim_t)CORE_SIZE;if (setrlimit(RLIMIT_CORE, &rlmt) == -1) {return -1; }   if (getrlimit(RLIMIT_CORE, &rlmt) == -1) {return -1; }   printf("After set rlimit CORE dump current is:%d, max is:%d\n", (int)rlmt.rlim_cur, (int)rlmt.rlim_max);/*测试非法内存,产生core文件*/int *ptr = NULL;*ptr = 10; return 0;
}

执行./main, 生成的core文件如下所示

GDB调试core文件,查看程序挂在位置。当core dump 之后,使用命令 gdb program core 来查看 core 文件,其中 program 为可执行程序名,core 为生成的 core 文件名。

4、参考资料

http://www.cnblogs.com/hazir/p/linxu_core_dump.html

http://www.cnblogs.com/niocai/archive/2012/04/01/2428128.html

http://baidutech.blog.51cto.com/4114344/904419/

转载于:https://www.cnblogs.com/xibuhaohao/p/11057834.html

linux下core dump--转载相关推荐

  1. linux 输出core文件大小,linux下core file size设置笔记

    现象说明:突然发现一台测试机器的java程序莫名其妙地没了,但是没有core dump!这就需要打开服务器的core文件生成的功能了,(即core dump文件),方便程序调试. 1)core文件简介 ...

  2. linux core文件默认位置,linux下core文件

    linux下core文件 参考:http://www.cnblogs.com/li-hao/archive/2011/09/25/2190278.html 并整合其他参考资料 在程序不寻常退出时,内核 ...

  3. linux打开core文件,[转载]linux下core文件设置与查看

    程序异常推出时,内核会生成一个core文件(是内存映像以及调试信息).可以通过使用gdb来查看core文件,指示出导致程序出错的代码所在的文件和行数. 1.查看系统中core文件生成的开关是否打开 1 ...

  4. linux系统core dump设置,Linux 下生成 core dump 配置和用法

    1. 启用 Core dump,系统默认关闭 Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试. 用到的命令是: ulimit // 输入目录查看状态, 0 说 ...

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

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

  6. linux系统core dump设置,linux coredump设置

    1. core 在Linux下程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息,编译时需要加上 -g -Wall). 使用gdb来查看core文件,可以指 ...

  7. Linux 设置core dump

    原文地址:http://blog.csdn.net/u013010310/article/details/50578691 最近本人负责项目中的流媒体转发模块,查了很多资料后选择了EasyDarwin ...

  8. Linux下core文件调试方法收藏

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://littlewhitetwo.blogbus.com/logs/35544335.html 在程序不寻常退出时,内核会在 ...

  9. 【Linux】Core dump故障分析

    引入: Q:如果一个程序运行3天后才会出错,这个时候难道需要我们一直用GDB调试程序3天吗? A:答案当然是否定的. 我们有更厉害的工具--Core dump 一.Coredump定义 Core Du ...

最新文章

  1. 网络推广过程中切忌要注意的问题
  2. LTE 有关HARQ
  3. 循序渐进——NAnt构建实例
  4. Docker管理面板Portainer中文汉化教程
  5. [Android]SQLite的使用
  6. Xamarin效果第十二篇之控制祖传PLC
  7. 力软 java主从表保存_JAVA常用知识总结(十二)——数据库(二)
  8. php设计之初用于什么,PHP设计模式(七)之门面模式
  9. 如何用Pygame写游戏(六)
  10. 大公司c#amp;.net转型java的原因有哪些?
  11. linux链接时报未定义的引用,g ++链接或引用不与本地安装的库一起使用:未定义的引用...
  12. Java 范例 - 线程
  13. jspsmartupload简述
  14. 计算机国际期刊等级,计算机期刊等级(全)
  15. Centos 8.5系统优化方案
  16. Django之全局配置-ALLOWED_HOSTS、LOGGING及多个子应用管理
  17. excel甘特图制作
  18. 玩转WSL 2(一)——WSL的介绍和安装
  19. 回文数—简单方法(C语言)
  20. 数据链路层的PPP协议

热门文章

  1. SQL Server 中的ROWID
  2. 这么烂的游戏也能卖2000万吗?
  3. Fast implementation/approximation of pow() function in C/C++
  4. UA SIE545 优化理论基础0 优化建模6 罐头的尺寸设计
  5. C#二进制文件编程实践
  6. 常用的webpack 配置
  7. java应用高内存占用
  8. 自写网站阶段之:终结篇
  9. machine learning (6)---how to choose features, polynomial regression
  10. poj 1699 Best Sequence (搜索技巧 剪枝 dfs)