2012-10-06 27 views
7

我正在使用Ubuntu 12.04 LTS。我寫了一個簡單的程序如下創建崩潰無法爲我的崩潰程序創建核心文件

// null.c 
#include<stdio.h> 

int main() 
{ 
    int *p = NULL; 
    int k=*p; 
    printf("%d",sizeof(0)); 
    return 0; 
} 

現在我有「的gcc -g null.c」 ,然後「./a.out」運行,並且如預期的輸出。

Segmentation fault (core dumped) 

現在我想看看使用gdb的核心轉儲文件。我做了以下事情

  1. 我檢查當前目錄,沒有核心轉儲文件
  2. 我試圖想改變在/ proc/sys目錄/內核/ core_pattern與內容「的核心。%E% p」。但我無法寫入文件。它說「Fsync失敗」。
  3. 我使用了「sudo vi/proc/sys/kernel/core_pattern」。仍然無法寫入文件。

我想在我的當前目錄中創建核心轉儲。現在做什麼?

回答

19

你真正的問題似乎不是「我的核心轉儲在哪裏」,而是「我如何修改/proc/sys/kernel/core_pattern」。

sudo bash -c 'echo core.%e.%p > /proc/sys/kernel/core_pattern' 

應該這樣做。

+0

它的工作......謝謝:) –

4

您需要使用下面的命令來調整自己的核心轉儲大小限制:

的ulimit -S -c 最大核心轉儲大小

該值以KB爲單位給出。

+0

我設定了它。但是我如何編輯core_pattern文件? –

2

你不需要使用核心模式。它只是轉儲在格式%即%P

你需要做的是#ulimit -c無限

,並檢查#ulimit -a

並確認核心文件大小設置正確。之後你會得到core.pid作爲core.pid。

1

我的理解是,使用ulimit不是永久性的,也就是說,如果重新啓動,則限制將回到0.要擁有無限永久性,您需要更改/etc/security/limits.conf。類似的核心模式等,改變/etc/sysctl.conf。