2013-03-07 160 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