我目前正在試圖在我的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文檔中要做什麼,但到目前爲止,似乎沒有任何工作。
幫助都是歡迎的。
事實上,我閱讀文檔太快了。感謝你們 – guite