В настоящее время я пытаюсь использовать опцию detect_memory_leaks
с boost на моем mac (OS: el capitan 10.11.3). До сих пор каждый раз, когда я выполнял свой тестовый двоичный файл с опцией --detect_memory_leaks=1
, независимо от того, сколько я утечка, boost не жалуется. Если вы хотите воспроизвести мою проблему, вот способ воспроизвести:Использование опции Boost test detect_memory_leaks на macOS
Я использую версию 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
As вы можете видеть, я включил все библиотеки boost, сгенерированные при компиляции boost/test, но используя -lboost_unit_test_framework
only 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, я был бы рад узнать об этом. Я попробовал несколько способов назвать этот вариант и попытался выяснить, что делать в форсированной документации, но пока ничего не работает.
Помощь приветствуется :)
Действительно, я читал документ слишком быстро. Спасибо вам, ребята – guite