linux下core dump--转载
原文链接: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--转载相关推荐
- linux 输出core文件大小,linux下core file size设置笔记
现象说明:突然发现一台测试机器的java程序莫名其妙地没了,但是没有core dump!这就需要打开服务器的core文件生成的功能了,(即core dump文件),方便程序调试. 1)core文件简介 ...
- linux core文件默认位置,linux下core文件
linux下core文件 参考:http://www.cnblogs.com/li-hao/archive/2011/09/25/2190278.html 并整合其他参考资料 在程序不寻常退出时,内核 ...
- linux打开core文件,[转载]linux下core文件设置与查看
程序异常推出时,内核会生成一个core文件(是内存映像以及调试信息).可以通过使用gdb来查看core文件,指示出导致程序出错的代码所在的文件和行数. 1.查看系统中core文件生成的开关是否打开 1 ...
- linux系统core dump设置,Linux 下生成 core dump 配置和用法
1. 启用 Core dump,系统默认关闭 Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试. 用到的命令是: ulimit // 输入目录查看状态, 0 说 ...
- Linux上Core Dump文件的形成和分析
Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,并且随着吐Core ...
- linux系统core dump设置,linux coredump设置
1. core 在Linux下程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息,编译时需要加上 -g -Wall). 使用gdb来查看core文件,可以指 ...
- Linux 设置core dump
原文地址:http://blog.csdn.net/u013010310/article/details/50578691 最近本人负责项目中的流媒体转发模块,查了很多资料后选择了EasyDarwin ...
- Linux下core文件调试方法收藏
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://littlewhitetwo.blogbus.com/logs/35544335.html 在程序不寻常退出时,内核会在 ...
- 【Linux】Core dump故障分析
引入: Q:如果一个程序运行3天后才会出错,这个时候难道需要我们一直用GDB调试程序3天吗? A:答案当然是否定的. 我们有更厉害的工具--Core dump 一.Coredump定义 Core Du ...
最新文章
- 网络推广过程中切忌要注意的问题
- LTE 有关HARQ
- 循序渐进——NAnt构建实例
- Docker管理面板Portainer中文汉化教程
- [Android]SQLite的使用
- Xamarin效果第十二篇之控制祖传PLC
- 力软 java主从表保存_JAVA常用知识总结(十二)——数据库(二)
- php设计之初用于什么,PHP设计模式(七)之门面模式
- 如何用Pygame写游戏(六)
- 大公司c#amp;.net转型java的原因有哪些?
- linux链接时报未定义的引用,g ++链接或引用不与本地安装的库一起使用:未定义的引用...
- Java 范例 - 线程
- jspsmartupload简述
- 计算机国际期刊等级,计算机期刊等级(全)
- Centos 8.5系统优化方案
- Django之全局配置-ALLOWED_HOSTS、LOGGING及多个子应用管理
- excel甘特图制作
- 玩转WSL 2(一)——WSL的介绍和安装
- 回文数—简单方法(C语言)
- 数据链路层的PPP协议
热门文章
- SQL Server 中的ROWID
- 这么烂的游戏也能卖2000万吗?
- Fast implementation/approximation of pow() function in C/C++
- UA SIE545 优化理论基础0 优化建模6 罐头的尺寸设计
- C#二进制文件编程实践
- 常用的webpack 配置
- java应用高内存占用
- 自写网站阶段之:终结篇
- machine learning (6)---how to choose features, polynomial regression
- poj 1699 Best Sequence (搜索技巧 剪枝 dfs)