2011-05-27 76 views
18

我想知道如何在Ubuntu中生成核心轉儲文件。我使用Ubuntu 8.04.1和gcc編譯器4.2.3。我寫了一個簡單的C程序來生成核心轉儲。我已經編譯了程序 - gcc -g badpointer.c。當我運行程序時,它給出了分段錯誤,但是沒有產生核心轉儲。我還需要做些什麼來生成核心轉儲文件?如何在Ubuntu中生成核心轉儲文件

回答

31

檢查輸出ulimit -c,如果輸出0,這就是爲什麼你沒有核心轉儲。

使用

ulimit -c unlimited

允許核心創作(也許一個真正的大小限制取代unlimited更安全)。

0

設置最大核心轉儲大小爲ulimit -c大小

32

通過激活你的核心轉儲:

ulimit -c unlimited 

同時檢查:

$ sysctl kernel.core_pattern 

,看看你的轉儲創建(%E會的進程名,並%T將系統時間)。

您可以在/etc/sysctl.conf中將其更改,然後通過sysctl -p重新加載。

您可以通過測試:

sleep 10 & 
killall -SIGSEGV sleep 

如果核心傾銷成功,你會看到後分段故障指示「(核心轉儲)」。

參見:

How to generate a stacktrace when my gcc C++ app crashes


Ubuntu的

如果你已經Ubuntu的,由apport/var/crash創建了轉儲,但在不同的格式(編輯文件看見)。

請閱讀更多:

https://wiki.ubuntu.com/Apport


OS X

在OS X,你的崩潰轉儲自動Crash Reporter在回溯的形式創建的。 通過執行Console並轉到「用戶診斷報告」部分(位於「診斷和使用信息」組下)或您可以在~/Library/Logs/DiagnosticReports中找到這些崩潰文件。

實際的核心文件在/cores中生成。

瞭解更多:How to generate core dumps in Mac OS X?

+0

用'睡眠10 killall -SIGSEGV sleep' HOWTO選項添加到repoen或保持封閉的應用程序? – 2017-05-27 16:20:33

+0

@ e-info128一旦進程死於SIGSEGV信號(基本崩潰),您無法重新打開它。你需要重新開始一個新的進程,除非它是一個服務,所以它可以自動重新生成。 – kenorb 2017-05-29 15:32:04