2013-03-07 130 views
2

我一直在我的程序中出现分段错误,但没有生成核心转储文件。 ulimit显示的值是无限的,确实没有ulimit -c的限制,看起来没有问题。有任何想法吗?分段错误,没有核心转储

+0

Mayby首先我们看一些代码? – Blood 2013-03-07 13:47:45

+0

这很可能是一个空指针或访问数组之外​​。 – QuentinUK 2013-03-07 13:48:22

+1

在调试器中运行该程序,以便在故障发生时您会中断。 – unwind 2013-03-07 13:48:40

回答

3

这可能有几个原因

  • 到目录
  • 程序改变工作目录
    寻找其他地方的核心没有写访问过
  • 磁盘已满
  • 的ulimit被设置在一个外壳中并且程序在不同的外壳或环境中启动
+2

+程序是一个守护进程,但OP会为其当前shell会话更改ulimit设置。 – Slava 2013-03-07 13:57:47

+0

@Slava谢谢,补充说。 – 2013-03-07 14:34:46

0

要解决的shell会话问题,提供你不反对被根测试:特别是你在内存访问错误的地址发生

#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 
-3

分段错误。资源不正确的初始化是非常可能的。例如,您可以使用Valgrind进行调试。

+0

这是如何解决没有产生核心转储的问题? – us2012 2013-03-07 14:45:13

+0

分配内存的问题不是语法错误。 – user1929959 2013-03-07 14:53:37

4

如果你的程序以root身份运行(或具有root功能)检查:

cat /proc/sys/fs/suid_dumpable

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

getsebool allow_daemons_dump_core