博客
关于我
GDB调试之core文件(如何定位到Segment fault)
阅读量:489 次
发布时间:2019-03-06

本文共 1003 字,大约阅读时间需要 3 分钟。

core dump又称为核心转储,是指在程序运行过程中发生异常时,操作系统将程序当前内存状况存储到一个core文件中的过程。当程序因段错误(Segment fault)或其他异常退出时,由内核发送SIGSEGV信号,从而触发core dump。这类错误通常与指针操作相关,经常出现在数组越界、字符串操作不当以及多线程环境中的竞态条件等情境中。

1. 常见引发core dump的原因

  • 内存访问越界

    • 数组越界:使用错误的下标访问数组,可能导致访问超出数组边界。
    • 字符串操作不当:在字符串操作中,未正确判断字符串结束符,导致读写越界。
    • 危险的字符串函数:使用如strcpy、strcat等函数进行读写操作,容易引发越界错误。应优先使用安全版本的函数如strncpy、strlcpy等。
  • 多线程环境中的线程不安全操作

    • 多线程程序若在未锁保护的情况下操作全局变量或共享数据,可能导致竞态条件引发段错误。
  • 非法指针使用

    • 使用空指针进行操作,直接导致段错误。
    • 随意将内存块转换为结构体指针进行操作,除非确保内存对齐,否则可能因bus error导致core dump。
  • 堆栈溢出

    • 使用过大局部变量,导致栈溢出,破坏系统内存结构,引发异常退出。
  • 配置系统限制core dump

    • 系统默认可能禁用core dump功能,需检查并设置相关参数。通过ulimit -c unlimited可以临时开启,或者在.bashrc中添加该命令使其生效。
  • 2. 调试core dump问题

    发生core dump后,可以使用gdb工具分析core文件以定位错误点。例如:

    gcc -g test.c
    ./a.out

    在生成的core文件中,可以通过gdb进行分析:

    gdb a.out core.1234

    通常core文件会生成在当前工作目录下。如需自定义存储路径,可在/etc/sysctl.conf中设置:

    kernel.core_pattern = /var/core/%t-%e-%p-%c.core

    3. 预防措施

  • 安全使用内核函数:避免strcpy、strcat等危险函数,改用安全版本。
  • 加锁保护:在多线程环境中对共享数据进行锁定。
  • 合理分配内存:避免使用过大局部变量,防止栈溢出。
  • 检查指针操作:确保指针转换符合内存对齐要求。
  • 配置支持core dump:确保系统允许生成core文件,避免因系统限制而无法获取关键信息。
  • 转载地址:http://peldz.baihongyu.com/

    你可能感兴趣的文章
    power english (3) main text -emotion mastery - focus
    查看>>
    POWER ENGLISH (6) - MODEL
    查看>>
    power english (1) —— passion
    查看>>
    Power English (1) 原文
    查看>>
    power English (3)原文
    查看>>
    POWER ENGLISH(7)- repetition
    查看>>
    SpringBoot中集成SpringBatch详细解析与实战示例(CSV文件读取十万条数据进行业务处理后写入Mysql数据库)
    查看>>
    powerbi 一张表在另外一张表中出现的数量_PowerBi之初步学习笔记
    查看>>
    QGIS怎样设置简体中文以及新建可编辑的多边形的图层
    查看>>
    PowerBuilder 使用自定义事件触发键盘Enter事件
    查看>>
    PowerCreatorCMS UploadResourcePic 任意文件上传漏洞复现
    查看>>
    PowerDesigner 使用的一些技巧(转)
    查看>>
    QGIS在Windows上下载安装与建立空间数据库连接
    查看>>
    PowerDesigner165安装婆姐汉花教程
    查看>>
    PowerDesigner使用教程:设置注释、默认值属性
    查看>>
    PowerDesigner使用教程:不显示背景网格
    查看>>
    PowerDesigner使用教程:创建数据模型以及导出
    查看>>
    PowerDesigner使用教程:右侧工具栏显示/隐藏
    查看>>
    PowerDesigner使用教程:导出sql文件以及解决中文乱码问题
    查看>>
    PowerDesigner使用教程:时间字段设置
    查看>>