Partager via


Assistant Débogage managé illegalPrepareConstrainedRegion

Mise à jour : novembre 2007

L'Assistant Débogage managé (MDA, Managed Debugging Assistant) illegalPrepareConstrainedRegion est activé lorsqu'un appel de méthode RuntimeHelpers.PrepareConstrainedRegions ne précède pas immédiatement l'instruction try du gestionnaire d'exceptions. Cette restriction étant au niveau MSIL, il est permis d'avoir une source générant du non-code entre l'appel et try, telle que les commentaires.

Symptômes

Une région d'exécution limitée (CER, Constrained Execution Region) qui n'est jamais traitée comme telle, mais comme un bloc de gestion des exceptions simple (finally ou catch). Par conséquent, la région ne s'exécute pas en cas de mémoire insuffisante ou d'abandon de thread.

Cause

Le modèle de préparation pour une CER n'est pas suivi correctement. Événement d'erreur. L'appel de la méthode PrepareConstrainedRegions utilisé pour marquer des gestionnaires d'exceptions comme introduisant une CER dans leurs blocs catch/finally/fault/filter doit être utilisé immédiatement avant l'instruction try.

Résolution

Assurez-vous que l'appel à PrepareConstrainedRegions se produit immédiatement avant l'instruction try.

Effet sur le runtime

Ce MDA n'a aucun effet sur le CLR.

Sortie

Le MDA affiche le nom de la méthode qui appelle la méthode PrepareConstrainedRegions, l'offset MSIL et un message indiquant que l'appel ne précède pas immédiatement le début du bloc try.

Configuration

<mdaConfig>
  <assistants>
    <illegalPrepareConstrainedRegion/>
  </assistants>
</mdaConfig>

Exemple

L'exemple de code suivant illustre le modèle qui provoque l'activation de ce MDA.

void MethodWithInvalidPCR()
{
    RuntimeHelpers.PrepareConstrainedRegions();
    Object o = new Object();
    try
    {
        …
    }
    finally
    {
        …
    }
}

Voir aussi

Concepts

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

Vue d'ensemble du marshaling d'interopérabilité

Référence

MarshalAsAttribute

PrepareConstrainedRegions