[C++] Visual Studio 2010: Wie checkt ihr auf Memory-Leaks?
Verfasst: 24.05.2012, 11:27
hallo Leute,
ich versuche gerade meinen Code unter Visual Studio 2010 auf memleaks zu checken, so wie's hier auf MSDN beschrieben ist. Das klappt leider nur so halb. Dieser Thread hier im Forum hat mir schonmal sehr geholfen, weil ich jetzt die Zeilennummern angezeigt bekomme. Jedenfalls solange ich die entsprechenden #defines in der jeweiligen .cpp Datei definiert habe.
Allerdings hab ich das Problem, dass der Aufruf bei mir keine Auswirkung hat, mit dem man die Memleak-Ausgabe bei Programmende aktivieren soll:
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
Ich bin also im Moment auf den manuellen Aufruf der Ausgabe angewiesen, also per _CrtDumpMemoryLeaks();
Wenn ich den allerdings in einer Klasse als letzten Aufruf innerhalb des Destruktors aufrufe, dann hat er mir z.B. meine SmartPointer noch nicht gelöscht. Ich krieg also gerade hunderte von Memory Leaks angezeigt, von denen ich nicht weiß, ob's tatsächlich welche sind, oder nicht. Wenn ich den Aufruf außerhalb der Klasse setze, krieg ich wieder keine Zeilennummern angezeigt.
Hat jemand einen Workaround dazu? Oder gibt's noch ne bezahlbare Alternative, um auf memleaks zu checken? Was benutzt ihr? Ich hab früher den Visual Leak Detector benutzt und war immer happy damit, aber der führt zu Fehlern, sobald ich meien Code dann über einen CLR-Wrappers einbinde.
danke und viele Grüße,
ponx
edit: CLR meinte ich, nicht CRT.. herrje.. (blush)
ich versuche gerade meinen Code unter Visual Studio 2010 auf memleaks zu checken, so wie's hier auf MSDN beschrieben ist. Das klappt leider nur so halb. Dieser Thread hier im Forum hat mir schonmal sehr geholfen, weil ich jetzt die Zeilennummern angezeigt bekomme. Jedenfalls solange ich die entsprechenden #defines in der jeweiligen .cpp Datei definiert habe.
Allerdings hab ich das Problem, dass der Aufruf bei mir keine Auswirkung hat, mit dem man die Memleak-Ausgabe bei Programmende aktivieren soll:
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
Ich bin also im Moment auf den manuellen Aufruf der Ausgabe angewiesen, also per _CrtDumpMemoryLeaks();
Wenn ich den allerdings in einer Klasse als letzten Aufruf innerhalb des Destruktors aufrufe, dann hat er mir z.B. meine SmartPointer noch nicht gelöscht. Ich krieg also gerade hunderte von Memory Leaks angezeigt, von denen ich nicht weiß, ob's tatsächlich welche sind, oder nicht. Wenn ich den Aufruf außerhalb der Klasse setze, krieg ich wieder keine Zeilennummern angezeigt.
Hat jemand einen Workaround dazu? Oder gibt's noch ne bezahlbare Alternative, um auf memleaks zu checken? Was benutzt ihr? Ich hab früher den Visual Leak Detector benutzt und war immer happy damit, aber der führt zu Fehlern, sobald ich meien Code dann über einen CLR-Wrappers einbinde.
danke und viele Grüße,
ponx
edit: CLR meinte ich, nicht CRT.. herrje.. (blush)