¿Herramientas para encontrar daños en la memoria en código C++ administrado?

StackOverflow https://stackoverflow.com/questions/34973

  •  09-06-2019
  •  | 
  •  

Pregunta

Tengo una aplicación .NET, que utiliza una biblioteca de compresión C++ de código abierto para comprimir imágenes.Estamos accediendo a la biblioteca de C++ a través de C++ administrado.Veo daños en el montón durante la compresión.Una llamada a _CrtIsValidHeapPointer encuentra un error en una llamada a free() al limpiar después de la compresión.

Mi pregunta es: ¿existen herramientas como Purify para ayudar a diagnosticar este problema y qué está causando la corrupción del montón cuando se trabaja en una combinación de código administrado y no administrado?Tengo la excepción atrapada en el depurador, pero sería bueno tener otras herramientas para ayudar a encontrar la solución al problema.

¿Fue útil?

Solución

En el código nativo, si la corrupción siempre ocurre en el mismo lugar de la memoria, puede usar un punto de interrupción de datos para romper el depurador cuando se cambia esa memoria.Lamentablemente, no se puede establecer un punto de interrupción de datos en el entorno administrado de C++, presumiblemente porque el GC podría mover el objeto en la memoria.

No estoy seguro si esto ayuda, pero espero que te lleve en la dirección correcta.

Otros consejos

en *nix, hay una herramienta llamada valgrind que utilizo para tratar problemas de memoria, como pérdidas de memoria y corrupción de memoria.

Purificación racional para Windows admite .NET, así que supongo que podría usarse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top