2

segfaults のあるプログラムを実行すると、エラー メッセージSegmentation fault: 11が表示されます。何らかの理由で、(コア ダンプ) メッセージが表示されません。シェル コマンドを実行してみましたulimit -c unlimitedが、それでも同じエラーが発生し、コア ダンプが表示されません。私はGDBが初めてなので、簡単なプログラムで試しました:

/* coredump.c */
#include <stdio.h>
int main (void) {
  int *point = NULL;
  *point = 0;
  return 0;
}

しかし、次を使用してコンパイルすると:

gcc coredump.c -g -o coredump

そしてそれを実行してください、それはまだ言いますsegfault: 11

まだ知らない場所にコア ダンプを作成していますか? gdb coredump coreを使用できるようにしたい。

4

4 に答える 4

2

このリンクを見てください:

オプションは次のとおりです。

  • ulimit -c 無制限 (デフォルト = 0: コア ファイルは生成されません)

  • ダンプのディレクトリは書き込み可能でなければなりません。デフォルトでは、これはプロセスの現在のディレクトリですが、/proc/sys/kernel/core_pattern を設定することで変更できます。

  • 状況によっては、/proc/sys/fs/suid_dumpable のカーネル値が原因でコアが生成されないことがあります。

  • 他のオプションの「man core」

  • find / -name core -print 2> /dev/nullファイルシステムでコアファイルを検索する

Linuxを実行していると思います。また、書き込み権限のあるディレクトリで.exeを実行していると思います。

したがって、私の上位 2 つの推測は、1) "ulimit -c unlimited" が設定されていないか、オーバーライドされているか、2) コア ファイルが生成されているが、"別の場所" に移動しています。

上記の提案が役立つはずです。見つけたものを投稿してください!

于 2012-08-18T17:06:09.783 に答える
1

シェルからクラッシュするプログラムを実行している場合は、SO2207233 への回答で見つけた Apple の Tech Note TN2124 のガイドラインに従う必要あります

いくつかの重要なポイントがあります。

  1. ulimit -c unlimitedで設定する必要がありますbash(同じ効果、 の別のコマンドtcsh)。
  2. /coresディレクトリにファイルを作成できるように、ディレクトリに権限を設定する必要があります。デフォルトのパーミッションは 1775 です。1777 が必要です。1 は、スティッキー ビットが設定されていることを示します。
  3. コア ダンプは/cores、PID のサフィックス (/cores/core.5312など) を付けて作成されます。

プログラムがクラッシュしたときにコアをダンプするようにグラフィカルに起動する場合は、コアが/etc/launchd.conf存在しない場合は作成limit core unlimitedし、ファイルに行を追加する必要があります。詳細については、Tech Note の情報を参照してください。


見て; コアダンプは巨大です!これはそれほど複雑でも大規模でもないプログラムであると考えてください。

#include <stdio.h>
int main(void)
{
    int *i = 0;
    int j = 0;
    printf("i = %d, j = %d, i / j = %d\n", *i, j, *i / j);
    return 0;
}

これによるコア ダンプは約 360 MB です。

于 2012-08-19T00:08:41.957 に答える
0

コア ファイルが現在のディレクトリに保存されず、別の命名規則に従う場合があります。

sysctl -a | grep kern.core

コアファイルが保存されている場所へのヒントを与えるかもしれません

于 2012-08-18T17:07:13.520 に答える
0

フラグを追加する場合は、gcc を使用します。

gcc -g -dH

コアダンプを生成できるはずです

-g フラグは gdb で使用するデバッグ情報を生成し、-dH フラグはエラーが発生したときにコア ダンプを生成します。

于 2012-08-18T17:07:20.557 に答える