6

我的程序中一直出现分段错误,但没有生成核心转储文件。ulimit 显示了一个无限的值, ulimit -c unlimited 只是为了确定,它似乎很好。有任何想法吗?

4

4 回答 4

5

如果您的程序以 root 身份(或具有 root 权限)运行,请检查:

cat /proc/sys/fs/suid_dumpable

或者如果程序是一个守护进程检查:

getsebool allow_daemons_dump_core

于 2013-03-07T14:47:11.577 回答
3

可能有几个原因

  • 对目录没有写权限
  • 程序更改工作目录
    也在其他地方寻找核心
  • 磁盘已满
  • ulimit 设置在一个 shell 中,程序在不同的 shell 或环境中启动
于 2013-03-07T13:54:04.470 回答
1

要解决 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
于 2013-03-07T14:05:54.640 回答
-6

分段错误尤其发生在您访问内存中的错误地址时。资源很可能未正确初始化。例如,您可以使用 Valgrind 进行调试。

于 2013-03-07T14:32:21.657 回答