码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • GDB调试CoreDump文件


    GDB调试CoreDump文件

    Author:onceday date:2022年8月1日

    1.引言

    当进程收到某些信号时,默认的信号处理函数在终止进程之前会对进程的内存映像进行存储,形成当前时刻的“快照”,这个“快照”就是Core dumped。

    会记录下内存信息,寄存器信息,内存管理信息,其他处理器和操作系统的状态和信息。

    Linux默认是关闭了core dump功能,需要手动打开。

    使用以下指令查询core dump 状态:

    ulimit -c   #返回0,代表关闭了core dump功能
    
    • 1

    可以使用以下命令在当前终端环境生效core dump:

    ulimit -c unlimited   
    
    • 1

    这开启了core dump功能,而且还没有限制文件大小,可以将unlimited改成合适的大小,单位为blocks(KB)。

    永久开启core dump功能,可修改配置文件/etc/security/limits.conf

    # /etc/security/limits.conf
    #
    # can be one of the following:
    #        - core - limits the core file size (KB)
    #
    #                 
    #*               soft    core            0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    该文件也可以修改其他的内容。

    2. 修改生成位置

    修改存储的位置:

    $ cat /proc/sys/kernel/core_pattern
    |/usr/share/apport/apport ......
    
    • 1
    • 2

    默认将数据通过一个管道传输到python脚本输出,因此不会输出core dump文件。

    更改该命令必须通过以下命令执行:

    sudo bash -c "echo core > /proc/sys/kernel/core_pattern"
    
    • 1

    通过编辑器或其他途径都有失败的可能,如果无法生成转储文件,务必使用该方法生成,该文件。

    如果不给定目录,那么默认为当前程序运行目录。

    其可具有以下参数:

    • %%,单个%号字符

    • %p,所dump进程的进程ID

    • %u,所dump的实际用户ID

    • %g,所dump进程的实际组ID

    • %s,导致本次coredump的信号

    • %t,coredump的时间戳

    • %e,程序文件名

    也可以通过修改/etc/systcl.conf文件,添加coredump对应目录及格式,此处user为用户名对应目录。

    /home/user/coredump/core.%e.%p.%s.%E
    
    • 1

    然后输入以下命令使其生效:

    sudo sysctl -p /etc/sysctl.conf
    
    • 1

    可以使用以下命令进行测试:

    kill -s SIGSEGV $$ #杀死当前的shell进程
    
    • 1

    3.无法生成core dump文件的一些解决方法

    可能是没有解开系统限制:

    ulimit -a  #查看系统限制
    ulimit -c unlimited #解除系统限制
    
    • 1
    • 2

    下面四个权限和空间不足的例子:

    • 程序设置了用户id(调用了setuid),当当前用户并非该程序文件的所有者。

    • 程序设置了组id(即调用segid),当当前用户并非该程序文件的组所有者。

    • 用户没有当前目录或指定core文件产生目录的写权限。

    • core文件太大,磁盘空间不足。

    4.使用gdb进行调试

    直接输入命令:

    gdb 可执行程序  核心转储文件
    
    • 1

    然后再使用bt和where查看堆栈错误信息。

    具体的gdb使用请查看专门文档!

    5.参考文档列表

    • Linux Core Dump 博客园 hazir。

    • Linux Core Dump 调试 知乎 飞翔的猪。

    • Linux下生成Core Dump文件的方法 CSDN博客 郭忠伟。

    • Linux下不产生Core文件的原因 CSDN博客 Small-K。

    • linux下gdb调试方法与技巧整理 CSDN博客 花开蝶自来-liu

  • 相关阅读:
    SpringBoot Starter缘起
    FFmpeg 中 -f 命令参数详解
    Vue中的样式绑定
    信息系统项目管理师Part11-软件设计
    数据导入与预处理-第6章-03数据规约
    视频监控平台是如何运作的?EasyCVR视频汇聚平台的高效策略与实践
    初识C++ (三)
    完成比写得好更重要,先完成初稿再说
    Keepalived+LVS+Httpd高可用实战笔记---多网段
    【SQL Server】数据库开发指南(九)详细讲解 MS-SQL 触发器的的创建、修改、应用与适用场景
  • 原文地址:https://blog.csdn.net/Once_day/article/details/126099206
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号