Suche nach Speicherlecks in einem boost::test::unit_test

Diese Frage ist ein die Fortsetzung zu einer früheren Frage auf boost::test::unit_test.

Ich geschrieben habe, ein unit-test und baute die Einheit testen. Hier ist die build-Ausgabe:

    2>------ Build started: Project: UnitTests, Configuration: Debug Win32 ------
2>  stdafx.cpp
2>  UnitTests.cpp
2>  UnitTests.vcxproj -> F:\Src\Crash\trunk\Debug\UnitTests.exe
2>  
2>  Running 3 test cases...
2>  Test suite "Master Test Suite" passed with:
2>    3 assertions out of 3 passed
2>    3 test cases out of 3 passed
2>  
2>  Detected memory leaks!
2>  Dumping objects ->
2>  {810} normal block at 0x007C5610, 8 bytes long.
2>   Data: <P C     > 50 E3 43 00 00 00 00 00 
2>  {809} normal block at 0x0043E350, 32 bytes long.
2>   Data: < V|             > 10 56 7C 00 00 00 CD CD CD CD CD CD CD CD CD CD 
2>  Object dump complete.

Ich weiß aus Erfahrung, dass die Ausgabe, die beschreibt den Speicher Leck ist, aus dem Gebrauch der CRT-memory-leak-detection.

Normalerweise, zu erkennen, wo die Zuweisungen sind im source-code, Sie könnten fügen Sie die folgenden am Anfang von deinem entry point:

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
_CrtSetBreakAlloc( 809 );

Jedoch, boost::test::unit_test definiert seinen eigenen Einstiegspunkt, hindert mich daran, das hinzufügen der folgenden Zeilen. Ich habe versucht, das hinzufügen dieser Zeilen in einer Halterung, aber ohne Erfolg. Ich habe auch schon versucht, indem diese Zeilen in der test-code, wieder ohne Erfolg. Wenn ich versuche diese änderungen, ich bekomme die folgende Ausgabe:

1>------ Build started: Project: UnitTests, Configuration: Debug Win32 ------
1>  UnitTests.cpp
1>  UnitTests.vcxproj -> F:\Src\Crash\trunk\Debug\UnitTests.exe
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: The command ""F:\Src\Crash\trunk\Debug\\UnitTests.exe" --result_code=no --report_level=short
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: :VCEnd" exited with code -2147483645.

Dass -ve Anzahl übersetzt 0x80000003 (ein oder mehrere Argumente sind ungültig).

Kann jemand empfehlen, wie könnte ich erkennen, wo in meinem source-code /tests diese zwei memory-leaks sein könnte?

Für die neugierigen, hier ist mein test:

void DShowUtilsGetFilter()
{
    //SysDevNames is a typedef for std::vector<wstring*>
    using namespace Crash::DirectShow;
    using namespace Crash::SystemDevices;
    using namespace std;

    _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
    _CrtSetBreakAlloc( 809 );

    HRESULT                 hr  = S_OK; 
    SysDevNames             AudioDevices;
    wstring                 wsAudioDevice;  
    CComPtr <IBaseFilter>   spAudioFilter;

    try
    {
        TFAIL( ListDevicesInCategory( CLSID_AudioCompressorCategory, AudioDevices ) );

        if( AudioDevices.size() == 0 )
            throw E_FAIL;

        wsAudioDevice.assign(*AudioDevices.at(0));

        TFAIL( GetFilter( CLSID_AudioCompressorCategory, wsAudioDevice, &spAudioFilter ) );

        if( spAudioFilter.p )
            spAudioFilter.Release();

        BOOST_CHECK_EQUAL (hr, S_OK);

    }
    catch(...)
    {
        BOOST_CHECK_EQUAL( 1, 0 );              
    }


    if( AudioDevices.size() > 0)
    {
        for(SysDevNamesItr itr = AudioDevices.begin(); itr != AudioDevices.end(); itr ++ )
            delete *itr;

        AudioDevices.clear();
    }
}
InformationsquelleAutor | 2011-03-11
Schreibe einen Kommentar