8

以前はコアなしで取得Segmentation Faultしていたので、コンパイル コマンドに -ggdb を追加し、gcc を実行する前に bash でこのコマンドを実行しました。

ulimit -c unlimited

しばらくはすべて問題ありませんでしたが (コアを取得しました)、Segmentation Fault (core dumped)gcc コマンドを発行したディレクトリにコアが表示されませんか? それはどこかに行くことができますか?他に何を試すことができますか?

少し追加情報:

  1. OS: Gentoo Linux
  2. 実行中のカーネルで ELF コア ダンプを有効にします。
  3. アプリケーションは gtk+ で書かれたテキスト エディタです。

回答: 次の 2 つの方法で見つけました。

  1. find / -name "core" -ls
  2. torekが提案したように:

    $ strace ./executable > output.txt 2>&1

    $ grep chdir output.txt

4

1 に答える 1

8

@JonathanLeffler が指摘したように、コア ダンプは現在のディレクトリに移動します。

を使用straceして、プロセスが chdir() を実行したかどうかを確認できます。残念ながらstrace、コア ダンプ自体の場所は表示されませんが、次のようになります。

$ cat crash.c
int main(void) {
    chdir("/tmp");
    *(int *)0 = 0;
    return 0;
}
$ cc -o crash crash.c
$ strace ./crash
execve("./crash", ["./crash"], [/* 53 vars */]) = 0
... [lots of libc trace stuff snipped] ...
chdir("/tmp")                           = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0} ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault
$ ls /tmp

そして今、コアがあります。pidファイルがあります。

于 2012-06-03T05:17:01.993 に答える