【发布时间】:2023-04-11 11:21:01
【问题描述】:
以前我会得到没有内核的Segmentation Fault,然后我在编译命令中添加了-ggdb,并在执行gcc之前在bash中执行了这个命令:
ulimit -c unlimited
有一段时间一切都很好(我有一个核心),但现在我得到了Segmentation Fault (core dumped),但发出 gcc 命令的目录中没有核心?会不会去别的地方?我还能尝试什么?
一点补充信息:
- 操作系统:Gentoo Linux
- 在运行的内核中启用了 ELF 核心转储。
- 该应用程序是一个用 gtk+ 编写的文本编辑器
答案: 我找到了两种方法:
-
find / -name "core" -ls -
按照托雷克的建议:
$ strace ./executable > output.txt 2>&1
$ grep chdir output.txt
【问题讨论】:
-
核心转储将在运行进程的当前目录中。该过程是否完全执行
chdir()?如果是这样,去它去的地方。 -
@Jonathan Leffler,感谢您的建议。该应用程序是一个用 gtk+ 编写的文本编辑器。我写的源代码中没有任何 chdir() 。为了安全起见(如果 gtk+ 源代码中有东西)我只打开了两个选项卡运行它,两个文件都在同一个目录中(与可执行文件相同),仍然没有核心。
-
core(5) 手册页解释了如何控制是否以及何时生成core文件。也许/proc/sys/kernel/core_pattern中的值指向不同的目录(我的系统管理员设置我们在/tmp中生成唯一命名的文件)。