Des outils pour détecter la corruption de la mémoire dans le code C++ managé ?

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

  •  09-06-2019
  •  | 
  •  

Question

J'ai une application .NET qui utilise une bibliothèque de compression C++ open source pour compresser les images.Nous accédons à la bibliothèque C++ via le C++ managé.Je constate une corruption du tas pendant la compression.Un appel à _CrtIsValidHeapPointer détecte une erreur lors d'un appel à free() lors du nettoyage après compression.

Ma question est la suivante : existe-t-il des outils tels que Purify pour aider à diagnostiquer ce problème et quelle est la cause de la corruption du tas lorsque vous travaillez dans une combinaison de code géré et non géré ?J'ai l'exception capturée dans le débogueur, mais ce serait bien d'avoir d'autres outils pour aider à trouver la solution au problème.

Était-ce utile?

La solution

En code natif, si la corruption se produit toujours au même endroit en mémoire, vous pouvez utiliser un point d'arrêt des données pour casser le débogueur lorsque cette mémoire est modifiée.Malheureusement, vous ne pouvez pas définir de point d'arrêt de données dans l'environnement C++ géré, probablement parce que le GC pourrait déplacer l'objet en mémoire.

Je ne sais pas si cela aide, mais j'espère que cela vous mènera dans la bonne direction.

Autres conseils

sur * nix, il y a un outil appelé valgrind que j'utilise pour traiter les problèmes de mémoire, comme les fuites de mémoire et la corruption de la mémoire.

Rational Purify pour Windows prend en charge .NET, donc je suppose que cela pourrait être utilisé ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top