Strumenti per trovare danneggiamenti della memoria nel codice C++ gestito?
-
09-06-2019 - |
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.
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?