IllegalPrepareConstrainedRegionÂ
The IllegalPrepareConstrainedRegion managed debugging assistant (MDA) is activated when a System.Runtime.CompilerServices.RuntimeHelpers.PrepareConstrainedRegions method call does not immediately precede the try statement of the exception handler. This restriction is at the MSIL level, so it is permissible to have non-code-generating source between the call and the try, such as comments.
Symptoms
A constrained execution region (CER) that is never treated as such, but as a simple exception handling block (finally or catch). As a consequence, the region does not run in the event of an out-of-memory condition or a thread abort.
Cause
The preparation pattern for a CER is not followed correctly. This is an error event. The PrepareConstrainedRegions method call used to mark exception handlers as introducing a CER in their catch/finally/fault/filter blocks must be used immediately before the try statement.
Resolution
Ensure that the call to PrepareConstrainedRegions happens immediately before the try
statement.
Effect on the Runtime
This MDA has no effect on the CLR.
Output
The MDA displays the name of the method calling the PrepareConstrainedRegions method, the MSIL offset, and a message indicating the call does not immediately precede the beginning of the try block.
Configuration
<mdaConfig>
<assistants>
<illegalPrepareConstrainedRegion/>
</assistants>
</mdaConfig>
Example
The following code example demonstrates the pattern that causes this MDA to be activated.
void MethodWithInvalidPCR()
{
RuntimeHelpers.PrepareConstrainedRegions();
Object o = new Object();
try
{
…
}
finally
{
…
}
}
See Also
Reference
MarshalAsAttribute
PrepareConstrainedRegions
Concepts
Diagnosing Errors with Managed Debugging Assistants
Interop Marshaling Overview