【问题标题】:How to make Check generate a core dump?如何使 Check 生成核心转储?
【发布时间】:2016-04-08 03:35:31
【问题描述】:

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

【问题讨论】:

标签: c unit-testing segmentation-fault coredump


【解决方案1】:

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

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

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

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

如果你发现一些测试应该总是给你一个失败的核心,你可以用编程方式控制它

srunner_set_fork_status (..., CK_NOFORK);

【讨论】:

  • 就是这样。谢谢!我跑了CK_FORK=no make check,现在有一个核心转储。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 2011-09-05
  • 2023-03-27
  • 2013-07-24
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多