2016-04-08 48 views
3

我目前正在試圖在我的mac上使用detect_memory_leaks選項來升壓(操作系統:el capitan 10.11.3)。到目前爲止,每次我使用選項--detect_memory_leaks=1執行我的測試二進制文件,無論我泄漏多少,提升都不會抱怨。如果你想重現我的問題,這裏有一種重現方式:在macOS上使用升壓測試detect_memory_leaks選項

我使用boost 1.59版本,並將單元測試框架編譯爲靜態庫。然後,我創建了兩個示例程序:

main.cpp中:

#define BOOST_TEST_MODULE test module name 
#include <boost/test/unit_test.hpp> 

TEST.CPP:

#include <boost/test/unit_test.hpp> 

BOOST_AUTO_TEST_SUITE(TestSuiteSample) 

BOOST_AUTO_TEST_CASE(TestCaseSample) 
{ 
    int * a = new int[3]; // This will leak memory, boost should complain 
    BOOST_CHECK(true); 
} 

BOOST_AUTO_TEST_SUITE_END() 

我編譯我的二進制方式如下:

g++ -I../boost_1_59_0 -L../boost_1_59_0/stage/lib -lboost_unit_test_framework -lboost_chrono -lboost_prg_exec_monitor -lboost_system -lboost_test_exec_monitor -lboost_timer -lboost_unit_test_framework main.cpp test.cpp 

由於你可以看到,我已經包含了編譯boost/test時生成的所有boost庫,但僅使用-lboost_unit_test_framework com堆好也。

現在我有一個可執行a.out我推出這樣:

./a.out --detect_memory_leaks=1 --log_level=all --report_level=detailed 

,我得到以下結果:

Running 1 test case... 
Entering test module "test module name" 
test.cpp:3: Entering test suite "TestSuiteSample" 
test.cpp:5: Entering test case "TestCaseSample" 
test.cpp:8: info: check true has passed 
test.cpp:5: Leaving test case "TestCaseSample"; testing time: 60us 
test.cpp:3: Leaving test suite "TestSuiteSample"; testing time: 82us 
Leaving test module "test module name"; testing time: 105us 

Test module "test module name" has passed with: 
    1 test case out of 1 passed 
    1 assertion out of 1 passed 

    Test suite "TestSuiteSample" has passed with: 
    1 test case out of 1 passed 
    1 assertion out of 1 passed 

    Test case "TestSuiteSample/TestCaseSample" has passed with: 
     1 assertion out of 1 passed 

正如你所看到的,有沒有約升壓投訴new int[3]我沒有刪除。起初,我以爲是優化代碼,甚至不分配我的變量的編譯器,但Valgrind的看到了泄漏爲definitely lost

==2571== by 0x10004E5BD: TestSuiteSample::TestCaseSample::test_method() (test.cpp:7) 

我不明白我在做什麼錯,但如果任何人都知道如何獲得test.cpp中泄漏產生的錯誤,我很樂意知道它。我嘗試了幾種方法來調用該選項,並試圖找出在boost文檔中要做什麼,但到目前爲止,似乎沒有任何工作。

幫助都是歡迎的。

回答

3

根據文檔[1][2](重點煤礦):

在平臺上,其中內存泄漏檢測是可能在目前運行的應用程序(裏面這只是Windows系列)您可以使用此界面打開和關閉此功能。

由於您使用的是Mac並且使用g ++編譯,所以它不會執行任何操作。

+0

事實上,我閱讀文檔太快了。感謝你們 – guite