Ich versuche derzeit, die detect_memory_leaks
Option mit Boost auf meinem Mac (OS: El Capitan 10.11.3) zu verwenden. Bis jetzt, jedes Mal, wenn ich meine Testbinär mit der Option --detect_memory_leaks=1
ausgeführt habe, egal wie viel ich lecke, beschwört sich Boost nicht. Wenn Sie mein Problem reproduzieren möchten, hier ist eine Möglichkeit zu reproduzieren:Verwenden Boost Test detect_memory_leaks Option auf MacOS
Ich verwende Boost 1.59 Version und kompiliere das Unit-Test-Framework als statische Bibliotheken. Dann erstelle ich zwei Beispielprogramme:
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()
ich kompilieren meine binäre die folgende Art und Weise:
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
Wie Sie können sehen, ich habe alle Boost-Bibliotheken enthalten, die beim Kompilieren von Boost/Test erzeugt wurden, aber unter Verwendung von -lboost_unit_test_framework
only com Haufen auch gut.
Jetzt habe ich eine ausführbare a.out
, dass ich auf diese Weise starten:
./a.out --detect_memory_leaks=1 --log_level=all --report_level=detailed
und ich bekomme folgendes Ergebnis:
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
Wie Sie sehen können, gibt es keine Beschwerde von Schub über die new int[3]
Ich habe nicht gelöscht. Zuerst dachte ich, es war der Compiler, der den Code optimiert und nicht einmal meine Variable zuweisen, aber valgrind sieht ein Leck als definitely lost
:
==2571== by 0x10004E5BD: TestSuiteSample::TestCaseSample::test_method() (test.cpp:7)
Ich verstehe nicht, was ich falsch mache, aber wenn Jeder weiß, wie man den Fehler erzeugt, der durch das Leck in test.cpp erzeugt wird, ich würde mich freuen, es zu wissen. Ich habe verschiedene Möglichkeiten ausprobiert, um die Option aufzurufen und habe versucht, herauszufinden, was ich in der Boost-Dokumentation tun soll, aber bisher scheint nichts zu funktionieren.
Hilfe ist willkommen :)
Tatsächlich lese ich das Dokument zu schnell. Danke Jungs – guite