【问题标题】:Cannot allocate memory using boost test无法使用 boost 测试分配内存
【发布时间】:2020-06-16 12:02:36
【问题描述】:

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

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

当我只运行这个测试套件时,一切正常。当我运行 80 次测试时,断言失败,“无法分配内存”作为 system 返回的值。有什么解决办法吗?

【问题讨论】:

  • 其他 79 项测试中的一项应该有问题:尝试逐项运行每个测试以确定并在此处再次发布。
  • 其他都还好。我应该检查什么?

标签: c++ boost boost-test


【解决方案1】:

如果您单独运行测试并且它可以工作,而在非隔离(与其他测试)中运行此测试并且它失败了,那么您的测试程序的状态正在发生“某些事情”并且需要修复.

例如,

  • 其他测试中的内存泄漏会影响此测试,
  • 事实上您在没有等待它们完成的情况下启动了太多线程(就像我在您的 sn-p 中看到的那样),
  • 等。

这不完全是 Boost.Test 问题,Boost.Test 只是向您显示程序中某处存在(相当大的)问题。确定的方法是单独运行事物,可能多次运行,例如,您可以真正观察到对内存的需求增加甚至崩溃。 Boost.Test 努力减轻这些崩溃(拦截操作系统的信号)并根据操作系统显示内存泄漏,但这并不是魔术。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 2013-04-22
    • 2015-05-17
    • 1970-01-01
    • 2017-07-15
    • 2015-08-15
    • 2015-04-01
    相关资源
    最近更新 更多