以我使用的 wsl(ubuntu22.04) 为例

当我们的程序出现段错误时,一般会报 Segmentation Fault,打开 core dump 后,会生成核心转储文件,它保存的是出错是程序的内存映像,方便后续调试查看,它的报错信息也会变成 Segmentaion Fault (core dumped)

// 测试程序,会导致 segmentation fault
#include <stdio.h>
int main(void)
{
        int *ptr = NULL;
        int a = *ptr;
        return 0;
}

启用 core dump

以下命令无法执行时,都可以切换成管理员权限 sudo 在执行看看,因为有可能是没有权限的问题

  1. ulimit -c
    查看是否为0,如果是就不会打开 core dump, 通过设置 ulimit -c 1024来打开,1024表示生成的 core dump 文件的限制大小,也可以替换成unlimited或者其他大小,即ulimit -c unlimited来解除限制

  2. ulimit -c不为0,但还是无法生成 core dump 文件,可能是系统配置了对用户的资源限制,编辑/etc/security/limits.conf这个文件,我这里使用编辑器vi,执行命令sudo vi /etc/security/limits.conf,修改以下条目,先 去掉注释,然后将大小修改为 unlimited 或者其他具体大小

*               hard    core            unlimited
*               soft    core            unlimited

然后 sudo reboot 或者重启使得配置生效,还是要注意看 ulimit -c 是否为0

  1. 以上还是不行,那就看看是不是 core dump 文件保存路径,执行以下命令,更改文件生成目录为程序所在目录, echo "core" | sudo tee /proc/sys/kernel/core_pattern,如果这样之后,发现可以了,在执行以下命令sudo vi /etc/sysctl.conf,修改(一般在最后一行)kernel.core_pattern=core,然后sudo sysctl -p或者重启,使得配置永久生效

重新进入后,还是要检查一下 ulimit -c是否为0,如果为0,可以执行以下echo "ulimit -c unlimited" >> ~/.bashrc,让系统每次启动自动设置,执行完该命令后,source ~/.bashrc重新加载配置

 posted on 2025-03-11 22:39  Dylaris  阅读(382)  评论(0)    收藏  举报