在boost.Test

时间:2016-02-04 12:25:01

标签: c++ boost memory-leaks

我目前正在使用boost.Test,我想知道是否有可能关闭内存泄漏检测,如果在DEBUG模式下编译。

我不想使用命令行参数开关--detect_memory_leak=0。我正在寻找一种#define参数,它可以在DEBUG模式下关闭内存泄漏检测功能。

通过定义某个编译器开关来关闭内存检测功能也是合适的。我目前正在使用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()

3 个答案:

答案 0 :(得分:3)

刚刚发现可能关闭内存泄漏检测的最佳方法是将以下代码段包含在一个测试中。

#include <boost/test/debug.hpp>

struct GlobalFixture {
    GlobalFixture()   {  
        boost::debug::detect_memory_leaks(false);
    }
    ~GlobalFixture()  {  }
};

BOOST_GLOBAL_FIXTURE(GlobalFixture);

但是,我无法关闭并开启单次测试的内存泄漏检测。

答案 1 :(得分:1)

您可以直接将环境变量BOOST_TEST_DETECT_MEMORY_LEAK设置为0或使用putenv:

#include <cstdlib>
//...
BOOST_AUTO_TEST_CASE(MyUnitTest) {
  putenv("BOOST_TEST_DETECT_MEMORY_LEAK=0");
  //...
}

修改

当您使用visual studio 2010时,可以尝试_putenv or _wputenv

#include <stdlib.h>
//...
BOOST_AUTO_TEST_CASE(MyUnitTest) {
  _putenv("BOOST_TEST_DETECT_MEMORY_LEAK=0");
  //...
}

否则,我在Boost文档中找到了一个函数detect_memory_leaks,但它似乎仅在最近的boost版本中可用。

答案 2 :(得分:0)

为什么不使用_DEBUG宏?

#ifdef _DEBUG
#define BOOST_TEST_DETECT_MEMORY_LEAK 0
#endif