illegalPrepareConstrainedRegion MDA

Note

Cet article est spécifique à .NET Framework. Ceci ne s’applique pas aux implémentations plus récentes de .NET, y compris .NET 6 et versions ultérieures.

L’Assistant illegalPrepareConstrainedRegion débogage managé (MDA) est activé lorsqu’un RuntimeHelpers.PrepareConstrainedRegions appel de méthode ne précède pas immédiatement l’instruction try du gestionnaire d’exceptions. Cette restriction est au niveau MSIL. Il est donc permis d’avoir une source qui ne génère pas de code entre l’appel et le try, comme les commentaires.

Symptoms

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

Cause

Le modèle de préparation d’un CER n’est pas suivi correctement. Il s’agit d’un événement d’erreur. L’appel PrepareConstrainedRegions de méthode utilisé pour marquer les gestionnaires d’exceptions comme l’introduction d’un cer dans leurs//catchfault/finallyfilter blocs doit être utilisé immédiatement avant l’instruction.try

Résolution

Vérifiez que l’appel se PrepareConstrainedRegions 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 appelant la PrepareConstrainedRegions méthode, le décalage 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>

Example

L’exemple de code suivant illustre le modèle qui entraîne l’activation de cette MDA.

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

Voir aussi