我的程序中一直出现分段错误,但没有生成核心转储文件。Ulimit显示了一个无限的值,如果Ulimit -c无限只是为了确定,它看起来很好。什么好主意吗?
如果您的程序以root身份运行(或具有root功能),请检查:
cat /proc/sys/fs/suid_dumpable
或如果程序是守护进程检查:
getsebool allow_daemons_dump_core
和允许守护进程转储核心:
setsebool -P daemons_dump_core 1
可能有以下几个原因
- 没有对目录 的写访问权限
- 程序更改工作目录
在其他地方也寻找核心 - 磁盘已满
- ulimit在一个shell中设置,程序在另一个shell或环境中启动
为了解决shell会话问题,只要您不反对以root身份进行测试:
#ifdef DEBUG
// Enable core dumps
struct rlimit corelim;
corelim.rlim_cur = -1;
corelim.rlim_max = -1;
if (setrlimit (RLIMIT_CORE, &corelim) != 0)
{
log_error ("Couldn't set core limit");
}
#endif
在访问错误的内存地址时出现分段错误。资源初始化不正确是很有可能的。例如,您可以使用Valgrind进行调试。