본문 바로가기

운동하는 개발자/Windows

UnhandledExceptionFilter() not work. 동작안함 (IDirect3D9)

728x90

https://learn.microsoft.com/ko-kr/windows/win32/api/errhandlingapi/nf-errhandlingapi-unhandledexceptionfilter

 

UnhandledExceptionFilter 함수(errhandlingapi.h) - Win32 apps

프로세스가 디버그되는 경우 처리되지 않은 예외를 디버거에 전달하는 애플리케이션 정의 함수입니다.

learn.microsoft.com

위 함수가 내 PC에서 동작하지 않는 문제가 있었다.
분명 다른 테스트서버에서는 정상적으로 동작하였던 코드였고 수정된 내용도 없었다.

디버깅 중에는 원래 해당 함수가 적용되지 않기에 로그를 찍어가며 확인하는데 이상하게도 특정 로직 동작 이전까지는 정상적으로 작용했다.

그래서 범위를 좁히던 중 문제의 코드는 여기였다

IDirect3D9*	pD3D9 = Direct3DCreate9(D3D_SDK_VERSION)​

winapi의 그래픽처리를 위한 D3d9.h의 함수를 선언한 이후부터 예외처리를 잡을 수 없었다.
(해당 함수 설명 : https://learn.microsoft.com/ko-kr/windows/win32/api/d3d9/nf-d3d9-direct3dcreate9)

구글링 해 본 결과 나와 동일한 문제를 겪는 사람이 있었으며 원인은 인텔의 그래픽 드라이버에서 UnhandledExceptionFilter() 함수를 재호출 해서 예외처리 제어권을 뺏겨버리는 상황이었다..
인텔의 그래픽카드는 인기가 거의 전무하여(국내에선..)  발생할 가능성이 없었지만 내 개발 pc에서는 별도의 그래픽 카드 없이 인텔 CPU의 내장그래픽이었기에 해당 문제가 발생했던 것이다

이러한 이슈 때문에 ms에서도 UnhandledExceptionFilter()를 dll 같은데서는 호출하지 말 것을 경고한다 (제어권을 뺏아가기에 정작 중요한 애플리케이션 쪽에서 처리가 불가능하므로) 
인텔 이 녀석들.. ㅂㄷㅂㄷ..

조금 더 파봤는데 그래픽카드 드라이버를 수정해서 해당 문제를 피할 수 있다는 글도 대충 봤었는데... 배보다 배꼽이 커지는 작업일 것이고 EndUser의 PC에 드라이버를 마음대로 수정해 버리는 것도 해서는 안되기에 대충 고런갑다 하고 넘겼다.
인텔 포럼에서 뭐를 제공하는 듯..? 여튼 그건 패스

결론 : 인텔 GPU를 사용 시 (CPU내에 있는 내장그래픽 포함) 해당 이슈가 발생하며 대응은 매우 매우 매우 어려움



 

728x90