2008-08-29 8 views
2

Ich habe eine .NET-Anwendung, die eine Open-Source-C++ - Komprimierungsbibliothek zum Komprimieren von Bildern verwendet. Wir greifen auf die C++ - Bibliothek über verwaltetes C++ zu. Ich sehe Heap-Korruption während der Komprimierung. Ein Aufruf von _CrtIsValidHeapPointer findet einen Fehler bei einem Aufruf von free() beim Bereinigen nach der Komprimierung.Tools zum Auffinden von Speicherbeschädigung in verwaltetem C++ - Code?

Meine Frage ist, gibt es Tools wie Purify, um dieses Problem zu diagnostizieren und was verursacht die Heap-Korruption bei der Arbeit in einer Kombination aus verwaltetem und nicht verwaltetem Code? Ich habe die Ausnahme im Debugger gefangen, aber es wäre schön, andere Tools zu haben, um die Lösung des Problems zu finden.

Antwort

1

In systemeigenem Code, wenn die Beschädigung immer an der gleichen Stelle im Speicher auftritt, können Sie eine data breakpoint verwenden, um den Debugger zu brechen, wenn dieser Speicher geändert wird. Leider können Sie in der verwalteten C++ - Umgebung keinen Datenhaltepunkt festlegen, vermutlich weil der GC das Objekt im Speicher verschieben könnte.

Nicht sicher, ob das hilft, aber hoffentlich führt es Sie in die richtige Richtung.

0

Rational Purify for Windows unterstützt .NET, also denke ich, dass könnte verwendet werden?

+0

Bei der letzten Verwendung von Purify, wenn Sie verwalteten Code in Ihrer Anwendung verwenden, versucht es nicht einmal, nicht verwalteten Speicher nachzuverfolgen und zeigt Ihnen nur die Größe des verwalteten Heapspeichers und wenn GCs auftreten. In einer völlig unmanaged App ist Purify ein absoluter Lebensretter! –

1

on * nix, es gibt ein Tool namens valgrind, das ich für den Umgang mit Speicherproblemen wie Speicherlecks und Speicherbeschädigung verwenden.

Verwandte Themen