如何让 Check 生成核心转储?

How to make Check generate a core dump?

我有一个单元测试(使用 Check)崩溃了。如何生成核心转储以便进行调试?

$ make check
.
.
.
XXX.c:216:E:Core:test01XXX:0: (after this point) Received signal 11 (Segmentation fault)

(第216行只是test01XXX的开始,不是实际的代码行)

试过ulimit -c unlimited但是没有核心文件

编辑:我认为这不是一般编写核心文件或在磁盘上找到它的问题。从同一目录,我可以 kill -SEGV 一个进程,它将生成一个核心文件:

$ ls core*
ls: cannot access core*: No such file or directory
$ cat crash.c
int main()
{
    return *(int *)0;
}
$ gcc -o crash crash.c
$ ./crash
Segmentation fault (core dumped)
$ ls core*
core.121934

我认为问题在于 Check 捕获了 SIGSEGV,我只需要以某种方式对其进行不同的配置。

什么是检查? 部分 front page,它默认为 运行 测试 "in a separate address space"(即,在儿童中process),所以他们不能破坏单元测试框架本身。

然而,No Fork Mode正是出于这个原因而提供的:

However, when you are trying to debug why the segmentation fault or other program error occurred, forking makes it difficult to use debugging tools

在解决此崩溃问题时设置或导出 CK_FORK=no

如果您发现某个测试应该始终为您提供失败的核心,您可以使用

以编程方式控制它
srunner_set_fork_status (..., CK_NOFORK);