AccessViolationException 예외는 네이티브 쪽에서 메모리 접근 위반을 했을 때 발생 하는 예외 이다.

할당되지 않은 메모리 또는 코드가 접근 권을 갖지 않는 메모리를 읽거나 쓰기를 시도하면 네이티브 코드(언 세이프 코드)에서 액세스 위반이 발생한다.

 

그러나 보통 System.Exception의 파생 클래스인 셈이라서 catch에서 이 예외를 포착할 것으로 생각하지만 애플리케이션은 이 예외를 잡지 못해서 이상 종료를 한다.

 

.NET Framework 3.5 이전에는 AccessViolationException catch 할 수 있었지만 .NET Framework 4 이후에서는 못하도록 바뀌었다.

 

이 예외를 잡고 싶다면 두 가지 방법을 하나를 하면 된다.

1. HandleProcessCorruptedStateExceptionsAttribute

AccessViolationException catch 하고 싶은 메소드에HandleProcessCorruptedStateExceptionsAttribute를 붙여서 잡을 수 있다.

[HandleProcessCorruptedStateExceptions]

void DoSomething()

{

try {

AccessViolationException를 발생하는();

} catch(AccessViolationException e) {

//---포착 가능

}

}

 

 

2.legacyCorruptedStateExceptionsPolicy

하위 호환성 때문에 기존(.NET Framework 3.5 이전)처럼 애플리케이션 전체에서 포착할 수 있도록 하고 싶은 경우. 구성 파일(*. config)<legacyCorruptedStateExceptionsPolicy>요소를 넣어서 해결할 수 있다.

<configuration>

<runtime>

<legacyCorruptedStateExceptionsPolicy enabled="true"/>

</runtime>

</configuration>

 

 

출처: http://blog.xin9le.net/entry/2015/07/22/053738

 

 

저작자 표시
신고
by 흥배 2016.01.22 08:00
| 1 |