core dumped未生成core文件
一、检查并启用核心文件生成
-
查看当前核心文件大小限制:
- 使用命令
ulimit -c
来查看系统允许的核心文件大小。如果返回值为0,则表示不生成核心文件。
- 使用命令
-
临时设置无限制的核心文件大小:
- 在当前shell会话中执行
ulimit -c unlimited
可以临时移除对核心文件大小的限制,但这仅在当前shell会话期间有效。
- 在当前shell会话中执行
-
永久设置无限制的核心文件大小:
- 编辑用户主目录下的
.bashrc
文件,在文件末尾添加ulimit -c unlimited
。 - 然后通过命令
source ~/.bashrc
或重新启动终端使更改生效,这样可以确保每次登录时都自动应用此设置。
- 编辑用户主目录下的
二、指定核心文件生成路径
即使设置了无限制的核心文件大小,有时候还是看不到核心文件,这可能是由于核心文件被其他进程捕获或删除所致。因此需要明确指定核心文件的生成位置:
- 作为root用户执行:使用命令
echo core > /proc/sys/kernel/core_pattern
来设定核心文件名为“core”,并且将其放置在当前工作目录下。完成后退出root模式,再次运行有问题的程序应该就可以看到核心文件了。
三、使用GDB调试核心文件
一旦获得了核心文件,就可以利用GNU Debugger (GDB) 来分析问题原因:
- 启动GDB进行调试:例如,如果你有一个名为
test
的可执行文件,并且有一个名为core.1234
的核心文件,那么你可以用命令gdb test core.1234
开始调试。 - 常用GDB命令:
print var
:打印变量var
的值。l
(小写字母L):列出源代码中的出错部分,帮助定位问题所在。
多用组合、少用继承
基于接口而非实现进行编程