如何使Check生成核心转储?

时间:2016-04-08 03:35:32

标签: c unit-testing segmentation-fault coredump

我有一个崩溃的单元测试(使用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,我只需要以某种方式配置它。

1 个答案:

答案 0 :(得分:1)

front page上的什么是检查?部分,它默认在单独的地址空间中运行测试"" (即,在子进程中),因此它们不会损坏单元测试框架本身。

但是,提供No Fork Mode正是出于这个原因:

  

但是,当您尝试调试分段错误或其他程序错误发生的原因时,分叉会使调试工具难以使用

在您发现此次崩溃时设置或导出CK_FORK=no

如果您发现某些测试应始终为您提供核心故障,您可以使用

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