Frage

Ich habe eine .NET-Anwendung, die eine Open-Source-C++-Komprimierungsbibliothek zum Komprimieren von Bildern verwendet.Wir greifen über verwaltetes C++ auf die C++-Bibliothek zu.Ich sehe eine Heap-Beschädigung während der Komprimierung.Ein Aufruf von _CrtIsValidHeapPointer stellt beim Aufräumen nach der Komprimierung einen Fehler bei einem Aufruf von free() fest.

Meine Frage ist: Gibt es Tools wie Purify, die bei der Diagnose dieses Problems helfen, und was verursacht die Heap-Beschädigung, wenn in einer Kombination aus verwaltetem und nicht verwaltetem Code gearbeitet wird?Ich habe die Ausnahme zwar im Debugger abgefangen, aber es wäre schön, andere Tools zu haben, die bei der Lösung des Problems helfen.

War es hilfreich?

Lösung

Wenn die Beschädigung im nativen Code immer an derselben Stelle im Speicher auftritt, können Sie a verwenden Datenhaltepunkt um den Debugger zu unterbrechen, 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.

Ich bin mir nicht sicher, ob das hilft, aber ich hoffe, es führt Sie in die richtige Richtung.

Andere Tipps

Auf *nix gibt es ein Tool namens Valgrind das ich zur Behandlung von Speicherproblemen wie Speicherlecks und Speicherbeschädigung verwende.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top