Domanda

Ho un'applicazione .NET, che utilizza una libreria di compressione C++ open source per comprimere le immagini.Stiamo accedendo alla libreria C++ tramite C++ gestito.Vedo corruzione dell'heap durante la compressione.Una chiamata a _CrtIsValidHeapPointer rileva un errore su una chiamata a free() durante la pulizia dopo la compressione.

La mia domanda è: esistono strumenti come Purify per diagnosticare questo problema e cosa causa il danneggiamento dell'heap quando si lavora con una combinazione di codice gestito e non gestito?L'eccezione è stata rilevata nel debugger, ma sarebbe bello avere altri strumenti per trovare la soluzione al problema.

È stato utile?

Soluzione

Nel codice nativo, se il danneggiamento si verifica sempre nello stesso punto della memoria, è possibile utilizzare a punto di interruzione dei dati per interrompere il debugger quando la memoria viene modificata.Sfortunatamente non è possibile impostare un punto di interruzione dei dati nell'ambiente C++ gestito, presumibilmente perché il GC potrebbe spostare l'oggetto in memoria.

Non sono sicuro che questo aiuti, ma spero che ti porti nella giusta direzione.

Altri suggerimenti

su *nix, c'è uno strumento chiamato valgrind che utilizzo per gestire problemi di memoria, come perdite di memoria e danneggiamento della memoria.

Rational Purify per Windows supporta .NET, quindi immagino che potrebbe essere usato?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top