以我使用的 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 在执行看看,因为有可能是没有权限的问题
-
ulimit -c
查看是否为0,如果是就不会打开 core dump, 通过设置ulimit -c 1024来打开,1024表示生成的 core dump 文件的限制大小,也可以替换成unlimited或者其他大小,即ulimit -c unlimited来解除限制 -
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
- 以上还是不行,那就看看是不是 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
浙公网安备 33010602011771号