• 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

    然后再使用btwhere查看堆栈错误信息。

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

    5.参考文档列表

  • 相关阅读:
    Swoole 的异步 Task 任务详解
    级联选择器的二维数组键值问题
    Generator异步方案
    js基础笔记学习200正则表达式语法1
    84-MongoDB高级介绍
    高效并发:Synchornized的锁优化详解
    【Vue】06 计算属性 侦听属性
    c# Bartender打印开发详解
    介绍HTTP
    SpringBoot中常用注解的含义
  • 原文地址:https://blog.csdn.net/Once_day/article/details/126099206