Ale*_*ph0 3 c++ boost memory-leaks
我目前正在使用 boost.Test,我想知道是否可以关闭内存泄漏检测,如果在调试模式下编译。
我不想使用命令行参数 switch --detect_memory_leak=0。我正在寻找一种#define参数,它在调试模式下关闭内存泄漏检测功能。
通过定义某个编译器开关来关闭内存检测功能也适合我。我目前正在使用 Microsoft Visual Studio 2010。
#define BOOST_TEST_DETECT_MEMORY_LEAK 0 // Preprocesser switch I'm looking for!
#define BOOST_TEST_MODULE MyUnitTest
#include <boost/test/included/unit_test.hpp>
BOOST_AUTO_TEST_SUITE(MySuite);
BOOST_AUTO_TEST_CASE(MyUnitTest) {
/// Following code has a memory leak
/// ....
}
BOOST_AUTO_TEST_SUITE_END()
Run Code Online (Sandbox Code Playgroud)
刚刚发现关闭内存泄漏检测的最佳方法可能是将以下代码片段包含在测试中。
#include <boost/test/debug.hpp>
struct GlobalFixture {
GlobalFixture() {
boost::debug::detect_memory_leaks(false);
}
~GlobalFixture() { }
};
BOOST_GLOBAL_FIXTURE(GlobalFixture);
Run Code Online (Sandbox Code Playgroud)
尽管如此,我还是无法关闭和打开单个测试的内存泄漏检测。
您可以直接将环境变量 BOOST_TEST_DETECT_MEMORY_LEAK 设置为 0 或使用 putenv :
#include <cstdlib>
//...
BOOST_AUTO_TEST_CASE(MyUnitTest) {
putenv("BOOST_TEST_DETECT_MEMORY_LEAK=0");
//...
}
Run Code Online (Sandbox Code Playgroud)
编辑
当您使用 Visual Studio 2010 时,您可以尝试_putenv 或 _wputenv:
#include <stdlib.h>
//...
BOOST_AUTO_TEST_CASE(MyUnitTest) {
_putenv("BOOST_TEST_DETECT_MEMORY_LEAK=0");
//...
}
Run Code Online (Sandbox Code Playgroud)
另外,我在 Boost 文档中找到了一个函数detector_memory_leaks,但它似乎只在最近的 boost 版本中可用。