2009-07-01 2 views
6

네이티브 코드에서 비 결정적인 System.AccessViolationException이 발생했습니다. 그것을 재현하는 것은 어렵지만 때때로 일어납니다. 액세스 위반에 필요한 시간이 약 2 시간이고 액세스 위반이 발생할 것이라는 보장이 없기 때문에 "그냥 디버깅 할 수 있는지"확실하지 않습니다.System.AccessViolationException의 원인을 확인하십시오.

네이티브 라이브러리는 관리되는 래퍼에서 사용합니다. Java에서 JNI를 통해 사용되며 .NET에서 IKVM의 JNI를 통해 사용됩니다. 이 문제는 IKVM 코드에서 재현되었지만 데이터 세트가 다르므로 IKVM의 응용 프로그램에서 사용하는 데이터로 Java 응용 프로그램을 테스트 할 수있는 방법이 없습니다.

나는 모든 것에 대한 근원을 가지고 있지만 (가능하다면) 나는 많은 변화를 피하기를 원한다.

네이티브 호출 스택이이 액세스 위반의 이유에 대한 충분한 정보를 제공한다고 저는 믿습니다.

이 액세스 위반의 원인을 확인하는 효과적인 방법이 있습니까?

나를위한 이상적인 해결책은 코드 또는 프로세스 환경의 일부 변경 사항이므로이 액세스 위반의 경우 메모리 덤프와 충돌하므로 변경을 수행하고 기다릴 수 있다고 생각합니다.

답변

2

예외가 발생할 때까지 기다릴 여유가 있다면 관리되는 네이티브 디버거 (혼합 된 디버깅 세션)를 첨부하고 AccessViolationException이 throw 될 때 중단되도록 관리되는 디버거를 설정하십시오. 관리 디버거는 처리되지 않은 예외를 감지하면 프로세스를 중단하므로 원시 호출 스택을 볼 수 있어야합니다.

+0

흠 .. 내 기본 코드가 변경되어 액세스 위반이 발생하고 디버그 기호로 다시 컴파일되도록했습니다. 내가 정상적으로 프로세스를 시작하고 Visual Studio 디버거를 연결했을 때. AccessViolationException을 던지기위한 중단 점을 추가했지만 catch되지 않았습니다. 어떤 제안? – okutane

+1

OK, 중단 점이 Win32 액세스 위반이되어야합니다. – okutane

관련 문제