1. 启用核心转储功能(当前终端生效)
ulimit -c unlimited
该命令用于解除系统对核心转储文件大小的限制,确保程序崩溃时能生成core文件。
检查 core 文件的生成路径和权限
cat /proc/sys/kernel/core_pattern
- 如果输出是
core,则表示默认生成在当前目录。 - 如果输出是类似
|/usr/share/apport/apport %p %s %c %d %P的内容,说明系统使用了 apport 等工具来处理崩溃,这可能会阻止core文件的生成。 - 如果输出是
/var/crash/core.%p,则core文件会生成在/var/crash/目录下,并且文件名包含进程 PID。
如何修改 core_pattern (需要 root 权限)
临时修改(重启后失效)
sudo sysctl -w kernel.core_pattern=core
永久修改(需要编辑配置文件)
sudo vim /etc/sysctl.conf
添加或修改一行:
kernel.core_pattern = core sudo sysctl -p
2. 重新触发段错误以生成core文件
./kvstore
程序崩溃后 ,在当前目录下查找名为 core 或 core.<pid> 的文件。
ls -l core*

3. 重新用 GDB 调试core文件 (编译时加-g,core可以生成更多信息)
gdb ./kvstore core.20860
<RET>是指回车键
|-----------|--------------------------|
| bt full | 获取崩溃时的函数调用链及局部变量,定位具体错误点 |