无法使用升压测试分配内存
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 努力缓解这些崩溃(拦截操作系统的信号)并根据操作系统显示内存泄漏,但这并不神奇。
隔离问题的其他方法是使用其他程序,例如 valgind
或 asan
/tsan
.
最后一种可能性是 "script.sh"
正在耗尽操作系统的所有内存。
我有一个这样的测试用例:
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 努力缓解这些崩溃(拦截操作系统的信号)并根据操作系统显示内存泄漏,但这并不神奇。
隔离问题的其他方法是使用其他程序,例如 valgind
或 asan
/tsan
.
最后一种可能性是 "script.sh"
正在耗尽操作系统的所有内存。