2016-04-08 2 views
3

В настоящее время я пытаюсь использовать опцию 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, я был бы рад узнать об этом. Я попробовал несколько способов назвать этот вариант и попытался выяснить, что делать в форсированной документации, но пока ничего не работает.

Помощь приветствуется :)

ответ

3

Согласно документации [1][2] (курсив мой):

На платформах, где обнаружение утечек памяти возможна внутри запущенного приложения (на данный момент это только Windows) вы можете включать и выключать эту функцию с помощью этого интерфейса.

Поскольку вы находитесь на Mac и строите с g ++, он ничего не сделает.

+0

Действительно, я читал документ слишком быстро. Спасибо вам, ребята – guite

Смежные вопросы