以前我会得到没有核心的Segmentation Fault
,然后我将-ggdb添加到编译命令并在执行gcc之前在bash中执行此命令:
ulimit -c unlimited
一段时间都很好(我有一个核心),但现在我得到Segmentation Fault (core dumped)
但是在发出gcc命令的目录中没有核心?可能会去别的地方吗?我还能尝试什么?
一点额外信息:
答案: 我发现它有两种方式:
find / -name "core" -ls
正如torek所说:
$ strace ./executable> output.txt 2>& 1
$ grep chdir output.txt
答案 0 :(得分:7)
正如@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 文件。