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é