使用boost :: test检测内存泄漏

时间:2011-09-23 06:56:06

标签: c++ memory-leaks boost-test

我尝试启用带有行号的msvc内存泄漏检测,就像我找到的here这个代码段一样:

Detected memory leaks!
Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} 
normal block at 0x00780E80, 64 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

我尝试设置预处理器定义

  

_CRTDBG_MAP_ALLOC

在项目属性中手动但我只能得到这个:

Dumping objects ->
{1466} normal block at 0x00BD4DD0, 40 bytes long.
 Data: <(o;   ; (o;   1 > 28 6F 3B 00 90 A9 3B 00 28 6F 3B 00 00 D6 31 10

没有行号。我还尝试使用BOOST_TEST_NO_MAIN手动定义main并自行转储,如下所示:

int main( int argc, char* argv[] )
{
    int res = ::boost::unit_test::unit_test_main( &init_function, argc, argv );  
    _CrtDumpMemoryLeaks();
    return res;
}

但也没有任何成功。怎么办呢?

3 个答案:

答案 0 :(得分:5)

使用Boost.Test,您可以使用--detect_memory_leaks =“分配编号”

答案 1 :(得分:4)

在MSVC中,您可以在代码中设置分配号码1466的断点:

  _crtBreakAlloc = 1466

或在Watch窗口中,您可以在应用程序启动后添加_crtBreakAlloc和值1466(当然,您需要在main函数中使用断点)。 More details on MSDN

答案 2 :(得分:0)

尝试使用调试器!例如,在deleaker的帮助下可以选择堆栈以查看内存的分配位置