2010-06-12 5 views
0

내 C++ 응용 프로그램에서는 자체 스레드를 실행하는 activeX 구성 요소를 사용합니다. 때로는이 구성 요소가 예외를 throw합니다. 이러한 예외를 잡아 내 전체 응용 프로그램이 손상되는 대신 복구를 수행하고 싶습니다. 하지만 소스 코드 나 스레드에 액세스 할 수 없기 때문에 어떻게 완료 될지 확신 할 수 없습니다.보이지 않는 스레드의 처리되지 않은 예외를 잡으십시오.

제가 생각할 수있는 유일한 해결책은 자체 프로세스에서 실행하는 것입니다. CreateProcess와 CreateRemoteThread와 같은 것을 사용하여 구현 방법을 확신 할 수 없습니다.

이 문제를 해결하는 방법에 대한 제안이 있으십니까?

+0

어떤 종류의 예외가 발생합니까? 오류 코드 (예 : 잘못된 데이터 (* 특히 * 포인터)를 구성 요소로 전달)가 아닌 것이 확실합니까? – slacker

+0

다양한 예외가 발생할 수 있습니다. 그것의 플래시 액티브 X 구성 요소는 어떤 플래시 파일이로드되었는지에 따라 예외를 던질 수 있습니다. 나는 그것을 통제 할 수 없다. – ronag

+0

가장 일반적인 액세스 위반 예외입니다. – ronag

답변

1

SetUnhandledExceptionFilter()를 사용하여 예외 필터를 설정해보십시오.

+0

어디에서 예외가 발생했는지 어떻게 알 수 있습니까? 나는 적절한 회복을 할 수 있니? – ronag

+0

MiniDumpWriteDump() (http://msdn.microsoft.com/en-us/library/ms680360%28VS.85%29.aspx 참조) 또는 AfxDumpStack()을 사용하는 스택 추적을 사용하여 코어 덤프를 만들 수 있습니다 (http : //msdn.microsoft.com/en-us/library/ahbxfdc5%28VS.80%29.aspx). –

+0

안녕하세요, 내가 사용하는 플래시 액트 X controller.if 내가 응용 프로그램 수준의 예외를 작성 SetUnhandledExceptionFilter() 자사의 전체 나를 위해 도움이 안된다 MFC 응용 프로그램이 있습니다. 및 해당 액세스 valitingion excepption, 콜백에서 다시 activex 컨트롤러에서 .for 단추 작업 ProcessWndProcException 콜백 메서드를 올바르게 처리 .... 내 의도 같은 장소에서 예외를 잡을 필요가 동일한. 사이드 메인 프로세스의 모든 스레드에서 모든 처리되지 않은 예외를 던지는 방법 – Srinivas

2

ActiveX 구성 요소가 자체 스레드를 시작하는 경우 수행 할 수있는 일이 많지 않습니다. 전역 예외 처리기를 설정하고 예외를 삼키려는 시도가있을 수 있지만 프로그램 상태가 손상되어 기괴한 "불가능"한 충돌이 발생할 가능성이 큽니다.

버그가있는 구성 요소를 별도의 프로세스로 실행하는 것이 가장 강력한 솔루션입니다. 프로그램 상태를 손상시키지 않으면 서 치명적인 오류를 식별하고 복구 할 수 있기 때문입니다.

+0

그러면 문제가됩니다. 새 프로세스를 만든 다음 실행해야하는 코드를 삽입하려면 어떻게합니까? – ronag

+0

지금 ActiveX 구성 요소를 어떻게 호스팅합니까? 이미 알고있는 명령 행 프로그램이 있다면 그것을 실행할 수 있습니다. 그렇지 않으면, 당신은 당신이 필요로하는 것을 실행하는 최소한의 것만을 포함하는 당신 자신의 소규모 호스트를 쓸 수 있습니다. 응용 프로그램의 아키텍처를 알지 못해도 그 이상을 말할 수는 없습니다. –

+0

내 응용 프로그램에서 처리하는 프레임을 렌더링하는 데 사용하는 FlashActiveX 구성 요소입니다. COM 및 ATL (나는 호스팅 래퍼를 작성하고 그 세부 사항에 대한 지식이 제한적이었습니다.)을 사용하여 호스팅했습니다. 나는 그것을 위해 호스트 할 수있는 명령 행 프로그램을 모른다. 올바르게 이해하는 경우 외부 프로그램을 시작하는 것이 유일한 방법입니다. 편집 : http://casparcg.svn.sourceforge.net/viewvc/casparcg/Server/Development/trunk/server/producers/flash/ FlashAxContainer 및 FlashProducer 참조 – ronag

관련 문제