无法使用升压测试分配内存

Cannot allocate memory using boost test

我有一个这样的测试用例:

BOOST_AUTO_TEST_CASE(Test) {
    std::thread([](){
        BOOST_CHECK(system("script.sh") >= 0);
    }).detach();
    //other checks here
}

当我运行只有这个测试套件时一切正常。当我 运行 我的 80 次测试断言失败时 "cannot allocate memory" 作为 system 返回的值。有什么解决方法吗?

如果你 运行 隔离测试并且它有效,而 运行 非隔离测试(与其他测试)并失败,那么 "something" 正在发生到你的测试程序的状态,需要修复。

例如,

  • 影响此测试的其他测试中的内存泄漏,
  • 您在没有等待完成的情况下启动了太多线程(就像我在您的代码片段中看到的那样),

这不完全是一个 Boost.Test 问题,Boost.Test 只是向您表明程序中某处存在(相当大的)问题。确定的方法是 运行 孤立的事情,可能多次这样,例如,你可以真正观察到内存需求增加甚至崩溃。 Boost.Test 努力缓解这些崩溃(拦截操作系统的信号)并根据操作系统显示内存泄漏,但这并不神奇。

隔离问题的其他方法是使用其他程序,例如 valgindasan/tsan.

最后一种可能性是 "script.sh" 正在耗尽操作系统的所有内存。