2012-10-06 12 views
7

私はUbuntu 12.04 LTSを使用しています。次のように私は今、私は「gccの-g null.c」 で実行し、期待どおり「./a.out」と出力されてクラッシュクラッシュしたプログラムのコアファイルを作成できません

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

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

を作成するための簡単なプログラムを書きました。

Segmentation fault (core dumped) 

ここで、gdbを使用してコアダンプファイルを確認します。私は次のこと

  1. 私は、現在のディレクトリを確認

    をした、コンテンツの「コア。%電子とcore_patternは、/ proc/sys/kernel /を変更しようとした私が試した何のコアダンプファイル
  2. はありません。% p "である。しかし、私はファイルに書き込むことができません。 「Fsync Failed」と言っています。
  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

コアパターンを使用する必要はありません。あなたが何をする必要があるか、そのちょうどその形式%e。でダンプします。%pを

は#ulimit -c無制限

あると#ulimit -a

をチェックして、コアファイルのサイズが正しく設定されているかどうかを確認します。その後、core.pidとしてコアを取得します。

1

ulimitの使用は永久的なものではなく、再起動すると0に戻ります。永続的な永続性を持たせるには、/etc/security/limits.confを変更する必要があります。同様にコアパターンなどについては、/etc/sysctl.confを変更してください。

関連する問題