10

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/kernel/core_pattern を「core.%e.%p」という内容で変更してみました。しかし、私はファイルに書き込むことができません。「Fsync Failed」と表示されます。
  3. 「sudo vi /proc/sys/kernel/core_pattern」を使用しました。まだファイルに書き込めません。

現在のディレクトリにコア ダンプを作成したいと考えています。今何をする?

4

4 に答える 4

25

あなたの本当の質問は、「私のコアダンプはどこですか」ではなく、「どうすれば変更できますか」のよう/proc/sys/kernel/core_patternです。

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

トリックを行う必要があります。

于 2012-10-06T14:13:40.703 に答える
4

次のコマンドを使用して、コア ダンプのサイズ制限を調整する必要があります。

ulimit -S -c最大コアダンプサイズ

値は Kb で与えられます。

于 2012-10-06T13:43:02.910 に答える
2

コア パターンを使用する必要はありません。その形式 %e.%p でダンプするだけです

あなたがする必要があるのは #ulimit -c unlimited です

#ulimit -a を確認してください

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

于 2012-10-06T17:15:40.607 に答える
1

私の理解では、ulimit の使用は永続的ではありません。つまり、再起動すると制限は 0 に戻ります。無制限に永続的にするには、/etc/security/limits.conf を変更する必要があります。コアパターンなども同様に、/etc/sysctl.conf を変更します。

于 2014-08-06T16:30:43.107 に答える