wxWidgets Memory Leaks finden



  • Hallo,

    ich hab mein wxWidgets 2.8.10 neu kompeliert mit den Einstellungen um das ganze wxDebug-Zeug zu haben. Mein Visual Studio hat in meiner Anwendung ein Memory-Leak gemeldet, das ich einfach nicht finden kann.

    #define wxUSE_DEBUG_CONTEXT 1
    #define wxUSE_MEMORY_TRACING 1
    #define wxUSE_GLOBAL_MEMORY_OPERATORS 0
    #define wxUSE_DEBUG_NEW_ALWAYS 1
    #define wxUSE_ON_FATAL_EXCEPTION 1
    #define wxUSE_STACKWALKER 1
    #define wxUSE_DEBUGREPORT 1
    

    das klappt auch. Nur seit ich nun mit dieser wxWidgets-Version arbeite, meldet mein Visual Studio keine Memory-Leaks mehr, auch nicht wenn ich absichtlich ein

    wxString *thing = new wxString(_T("Hallo"));
    

    einbaue und den Zeiger nicht lösche.

    Ich habe dann in meiner OnInit() folgendes eingebaut:

    wxDebugContext::SetCheckpoint();
    

    und in meiner d'tor der App-Klasse folgendes:

    wxDebugContext::Dump();
    wxDebugContext::PrintStatistics(true);
    

    laut Doku müssten mir nun unendlich viele Informationen über meinen Speicher gegeben werden. Aber alles was ich bekomme ist ein:

    ----- Memory dump -----
    
    wxFont at 0xDF3170, size 8
    
    ----- Memory statistics -----
    
    1 objects of class wxFont, total size 8
    
    Number of object items: 1
    
    Number of non-object items: 0
    
    Total allocated size: 8
    

    Was jetzt nicht wirklich hilfreich ist. Mein Absichtlicher wxString* ist da nicht drinnen und sowas wie ne Zeilennummer oder eine .cpp-Datei steht da auch nicht.

    Was mache ich falsch?

    Ich hätte das so verstanden, dass wenn ich "#define wxUSE_DEBUG_NEW_ALWAYS 1 setze" ich dann auch Zeilennummern und Datei bekomme und auch die Speicheradresse bei der Reservierung.

    Gruß,
    Stefan


  • Mod

    Evtl. gilt das nicht für wxString 😃

    sonst ka. 😉



  • Von der wxWidgets-Seite:
    http://docs.wxwidgets.org/stable/wx_debuggingoverview.html#debuggingoverview

    wxDebugContext overview schrieb:

    wxDebugContext::SetCheckpoint();

    wxDebugContext::SetFile("c:\\temp\\debug.log");

    wxString *thing = new wxString;

    char *ordinaryNonObject = new char[1000];

    wxDebugContext::Dump();
    wxDebugContext::PrintStatistics();

    Sollte also eigentlich schon auch bei wxString gehen?!?!?


Anmelden zum Antworten