8

以前我会Segmentation Fault没有内核,然后我在编译命令中添加了 -ggdb 并在执行 gcc 之前在 bash 中执行了这个命令:

ulimit -c unlimited

有一段时间一切都很好(我有一个核心),但现在我得到Segmentation Fault (core dumped)但在发出 gcc 命令的目录中没有核心?会不会去别的地方?我还能尝试什么?

一点附加信息:

  1. 操作系统:Gentoo Linux
  2. 在正在运行的内核中启用了启用 ELF 核心转储。
  3. 该应用程序是一个用 gtk+ 编写的文本编辑器

答: 我找到了两种方法:

  1. find / -name "core" -ls
  2. 正如托雷克所建议的:

    $ 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 回答