Assistant Débogage managé gcManagedToUnmanaged
L'Assistant Débogage managé (MDA, Managed Debugging Assistant) gcManagedToUnmanaged provoque une opération garbage collection chaque fois qu'un thread effectue la transition du code managé au code non managé.
Symptômes
Un composant utilisateur non managé lève une violation d'accès lors de la tentative d'utilisation d'un objet managé qui avait été exposé à COM. L'objet COM semble avoir été libéré. La violation d'accès est non déterministe.
Cause
Si un composant non managé n'effectue pas correctement le décompte de références d'un objet COM managé, le runtime peut collecter un objet managé exposé à COM lorsque le composant non managé détient encore une référence à l'objet. Le runtime appelle Release pendant les opérations garbage collections de sorte que si le composant utilisateur utilise l'objet avant l'opération garbage collection, il n'aura pas encore été collecté. Source du non déterminisme.
Solution
L'activation de cet assistant réduit le laps de temps entre le moment où l'objet peut participer à une collection et le moment où Release est appelé, ce qui contribue à localiser le composant non managé qui tente en premier d'accéder à l'objet récupéré par le garbage collector.
Effet sur le runtime
Déclenche une opération garbage collection chaque fois qu'un thread effectue la transition du code managé au code non managé.
Sortie
Ce MDA ne produit aucune sortie.
Configuration
<mdaConfig>
<assistants>
<gcManagedToUnmanaged/>
</assistants>
</mdaConfig>
Voir aussi
Référence
Assistant Débogage managé gcUnmanagedToManaged
Concepts
Diagnostic d'erreurs avec les Assistants de débogage managés