Partager via


Assistant Débogage managé illegalPrepareConstrainedRegion

Remarque

Cet article est spécifique au .NET Framework. Elle ne s’applique pas aux implémentations plus récentes de .NET, notamment .NET 6 et versions ultérieures.

L’Assistant Débogage managé illegalPrepareConstrainedRegion est activé quand 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 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’interruption de thread.

Cause

Le modèle de préparation pour une région d’exécution limitée n’est pas suivi correctement. Il s’agit d’un événement d’erreur. L’appel de méthode PrepareConstrainedRegions utilisé pour marquer des gestionnaires d’exceptions comme introduisant une région d’exécution limitée dans leurs blocs catch/finally/fault/filter doit être utilisé immédiatement avant l’instruction try.

Résolution

Vérifiez que l’appel à PrepareConstrainedRegions se produit immédiatement avant l’instruction try.

Effet sur le runtime

Cet Assistant Débogage managé n'a aucun effet sur le CLR.

Sortie

L’Assistant Débogage managé 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 cet Assistant Débogage managé.

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

Voir aussi