原文地址:http://blog.csdn.net/u013010310/article/details/50578691

最近本人负责项目中的流媒体转发模块,查了很多资料后选择了EasyDarwin作为转发服务器。编译源码之后服务器稳定运行了半个月,但是今天突然不能正常转发了。由于本人Linux新手,所以没有在Linux下调试代码的经验,在群主的指导下知道可以设置core文件来调试代码,于是几经周折完成了core文件的设置,特将过程记录下来。

什么是coredump

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

Linux下打开coredump

本人使用的Linux发行版是Ubantu 14.04,设置生成coredump文件的方法如下:

  • 打开core dump功能
    在终端中输入命令ulimit -c(也可以通过ulimit -a查看) 输出的结果为 0,说明默认是关闭 core dump 的,即当程序异常终止时,也不会生成 core dump 文件。

    我们可以使用命令 ulimit -c unlimited 来开启 core dump 功能,并且不限制 core dump 文件的大小; 如果需要限制文件的大小,将 unlimited 改成你想生成 core 文件最大的大小,注意单位为 blocks(KB)。
    用上面命令只会对当前的终端环境有效,如果想需要永久生效,可以修改文件/etc/bash.bashrc文件,添加一行ulimit -c unlimited,然后执行命令source /etc/bash.bashrc生效。此时通过ulimit -a查看:

    (有网友的资料是直接修改/etc/security/limits.conf文件,但是我测试了没有效果。)
  • 设置core文件保存路径
    默认生成的 core 文件保存在可执行文件所在的目录下,文件名就为 core,修改此文件名方法有两种:
    1、通过修改/proc/sys/kernel/core_uses_pid文件可以让生成 core 文件名是否自动加上 pid 号。命令如下:echo 1 > /proc/sys/kernel/core_uses_pid生成的 core 文件名将会变成 core.pid,其中 pid 表示该进程的 PID。

    2、还可以通过修改/proc/sys/kernel/core_pattern 来控制生成 core 文件保存的位置以及文件名格式。命令可以用echo "/EasyDarwin/corefile-%e-%p-%t" > /proc/sys/kernel/core_pattern 设置生成的 core 文件保存在/EasyDarwin/ 目录下,文件名格式为 “core-命令名-pid-时间戳”。其中:
    其中:

    • %c 转储文件的大小上限
    • %e 所dump的文件名
    • %g 所dump的进程的实际组ID
    • %h 主机名
    • %p 所dump的进程PID
    • %s 导致本次coredump的信号
    • %t 转储时刻(由1970年1月1日起计的秒数)
    • %u 所dump进程的实际用户ID

gdb调试core文件

产生了 core 文件,我们该如何使用该 Core 文件进行调试呢?Linux 中可以使用 GDB 来调试 core 文件,步骤如下:

  • 首先,写段错误代码,这个对程序猿来说很简单,使用 gcc 编译源文件,加上 -g 以增加调试信息;
#include<stdio.h>int main()
{int *p = NULL;*p = 2;printf("%d",*p);return 0;
}

编译:

gcc -g -o test test.c
  • 运行程序,以使程序异常终止时能生成 core 文件;
./test
  • 当core dump 之后,使用命令 gdb program core 来查看 core 文件,其中 program为可执行程序名,core 为生成的 core 文件名。
gdb test core

可以看到gdb直接定位到了程序中出错的具体行。至于具体gdb的使用方法本人也还在摸索之中。需要说明的是,要是EasyDarwin能在错误时产生core文件,需要使用./Built debug命令来编译源程序。最后感谢EasyDarwin群主的热心帮助。

Linux 设置core dump相关推荐

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

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

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

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

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

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

  4. 【Linux】Core dump故障分析

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

  5. 嵌入式linux应用程序崩溃,嵌入式Linux gdb core dump快速定位程序crash问题

    指定生成 core dump 文件: echo "/tmp/core-%e-%p-%t" > /proc/sys/kernel/core_pattern ulimit -c ...

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

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

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

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

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

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

  9. linux下core dump--转载

    原文链接:https://www.cnblogs.com/Anker/p/6079580.html 1.前言 一直在从事linux下后台开发,经常与core文件打交道.还记得刚开始从事linux下开发 ...

最新文章

  1. 用polt3画曲面_用SolidWorks建模一个:防滑板曲面造型
  2. 分组卷积新进展,全自动学习的分组有哪些经典模型?
  3. 大家放松下,仿《大腕》经典对白
  4. AUTOSAR专业知识篇(六)-自动驾驶传感器的选择与布置
  5. ROC曲线(Receiver Operating Characteristic Curve)
  6. plt.fill()
  7. KMP算法模板与解析
  8. 软件的接口设计图_软件工程中的分析、设计与实例
  9. python爬虫微信_python 微信爬虫
  10. 2018华为网络技术大赛复赛
  11. 怎么还原打开方式为计算机程序,W10电脑系统如何还原打开方式
  12. JUC的常用辅助工具
  13. PDF文件太大了怎么办,如何压缩PDF且不改变清晰度
  14. 2019年安徽大学ACM/ICPC实验室新生赛(公开赛)
  15. 2021-9-28 数据结构学习 第四章 - 栈 和 队列【1024Re】
  16. Easy EDA #学习笔记08# | 创建元件库(原理图库与PCB封装库)
  17. 毕业季基于ssm框架的管理系统设计与实现如何写开题报告,怎么完成设计
  18. int argc,char*argv[ ]的简洁解释
  19. Postgres忘记密码如何修改密码
  20. Outlook2016关联QQ邮箱

热门文章

  1. java 将json转换成sql_search-sqlparams
  2. rust相框加载图片代码_Rust 能取代 Python,更好的实现神经网络?
  3. offset linux,Linux 宏定义之 offsetof 与 container_of(十九)
  4. java青蛙青蛙跳井_速解青蛙跳井问题
  5. Centos 开机无法输入密码的问题
  6. 【论文笔记】Region-based Convolutional Networks for Accurate Object Detection and Segmentation
  7. C# 索引器(Indexer)
  8. 局部特征(4)——SIFT和SURF的比较
  9. 人工智能:第九章 Agent (艾真体)
  10. 前沪江高级架构师学习笔记分享:分布式框架设计与实现