1

我使用 catch2 作为单元测试框架。一个测试用例应该检查函数调用是否导致抛出异常,所以我基本上写

REQUIRE_THROWS (class.throwingFun (arg1, arg2));

会发生什么:函数抛出并且测试崩溃。查看调用堆栈,我发现崩溃是由于在调用我的 throwing 成员函数时引发的异常而发生的。这里可能出了什么问题,所以抛出的异常不会被 REQUIRE_THROWS 捕获,而是使整个测试崩溃?

编辑:由于这是一个复杂且封闭源代码的项目,因此我无法为该问题提供一个最小且可重现的示例。但是,也许有人遇到了类似的错误,并且可以假设可能导致这种行为的原因。

4

1 回答 1

2

自己找到了原因——有点复杂。

被测函数中的异常应该被抛出以防它分配内存——这是对永远不允许调用 malloc 的实时安全函数的测试。对于测试,传入的函数激活了基于作用域的 malloc 检查器,然后分配了内存。REQUIRE_THROWS 也在内部分配内存,出于某些原因,它以这种方式自行触发。

这只能在发布版本中重现,调试版本工作正常,可能是由于将调用的函数内联到扩展的 catch 宏中,导致检测触发函数体外部的分配。

于 2020-03-20T15:32:21.653 回答