Share via


illegalPrepareConstrainedRegion MDA

illegalPrepareConstrainedRegion MDA(관리 디버깅 도우미)는 RuntimeHelpers.PrepareConstrainedRegions 메서드가 예외 처리기의 try 문의 바로 앞에 호출되지 않을 경우 활성화됩니다. 이 제한은 MSIL 수준에 적용되므로 호출과 try 사이에 코드가 아닌 생성 소스(예: 주석)를 포함할 수 없습니다.

증상

CER(제약이 있는 실행 영역)이 이와 같이 처리되지 않고 간단한 예외 처리 블록(finally 또는 catch)으로 처리됩니다. 따라서 메모리 부족 조건 또는 스레드 중단이 발생할 경우 해당 영역이 실행되지 않습니다.

원인

CER에 대한 준비 패턴을 제대로 따르지 않았습니다. 이것은 오류 이벤트입니다. CER을 catch/finally/fault/filter 블록에 도입할 때 예외 처리기로 표시하는 데 사용되는 PrepareConstrainedRegions 메서드 호출은 try 문의 바로 앞에 사용되어야 합니다.

해결 방법

PrepareConstrainedRegions 호출이 try 문의 바로 앞에 실행되는지 확인합니다.

런타임에 대한 영향

이 MDA는 CLR에 아무런 영향을 미치지 않습니다.

출력

MDA는 PrepareConstrainedRegions 메서드를 호출하는 메서드 이름, MSIL 오프셋 및 호출이 try 블록 시작 부분의 바로 앞에 실행됨을 나타내는 메시지를 표시합니다.

구성

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

예제

다음 코드 예제에서는 MDA를 활성화하는 패턴을 보여 줍니다.

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

참고 항목