Partager via


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

MarshalAsAttribute

Assistant Débogage managé gcUnmanagedToManaged

Concepts

Diagnostic d'erreurs avec les Assistants de débogage managés

Marshaling d'interopérabilité

Autres ressources

Interopérabilité