zoukankan      html  css  js  c++  java
  • linux 下的 core dump

    linux 下的 core dump

    20191331 lyx

    1.什么是Core Dump

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

    core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而 core dump 文件可以再现程序出错时的情景。

    这就让我们可以快速定位出错的代码位置,观察错误的类型,从而快速修复程序。

    2.Core Dump 如何产生

    Linux 中信号是一种异步事件处理的机制,每种信号对应有其默认的操作,你可以在 这里 查看 Linux 系统提供的信号以及默认处理。默认操作主要包括忽略该信号(Ingore)、暂停进程(Stop)、终止进程(Terminate)、终止并发生core dump(core)等。如果我们信号均是采用默认操作,那么,以下列出几种信号,它们在发生时会产生 core dump:

    Signal Action Comment
    SIGQUIT Core Quit from keyboard
    SIGILL Core Illegal Instruction
    SIGABRT Core Abort signal from abort
    SIGSEGV Core Invalid memory reference
    SIGTRAP Core Trace/breakpoint trap

    我们在编程实践过程中就可以利用

    程序运行过程中异常终止或崩溃时会发生 core dump

    这一特性进行快速调试和修复

    3.Core Dump 的相关配置

    • 查看是否开启core dump 若值为0 则为core dump关闭

    • 打开core dump功能

    使用命令 ulimit -c unlimited 来开启 core dump 功能,并且不限制 core dump 文件的大小。

    • 测试core dump

    使用 sleep 10 命令并在执行过程中使用 crtl\来终止命令就会产生core 文件,以检查core dump功能是否开启。

    4.使用GDB和core dump快速定位错误

    • 首先编译源文件时使用 -g 命令,增加调试信息。

    • 执行./server程序,程序异常产生core文件

    • 使用gdb进行调试

    可以看到 错误信息 和错误函数都已给出

    我们可以快速进行定位修改。

    总结core dump很好用,很高效。

    参考资料

    Linux系统调用--getrlimit()与setrlimit()函数详解 https://www.cnblogs.com/niocai/archive/2012/04/01/2428128.html

    Linux上Core Dump文件的形成和分析 https://blog.51cto.com/baidutech/904419

  • 相关阅读:
    C语言枚举类型使用简介
    C实现单链表(转)
    不同数据库数据类型
    Informix 常用命令
    工作了
    修改route使用有线/无线同时连接内外网
    Perl 时间函数
    Linux 系统命令
    SQL SERVER 触发器示例
    Informix 函数
  • 原文地址:https://www.cnblogs.com/DKYcaiji/p/15595031.html
Copyright © 2011-2022 走看看