Visual Studio 디버깅은 현재 다음 이벤트 유형을 지원합니다.
비동기 이벤트
디버그 중인 애플리케이션의 상태가 변경되고 있음을 SDM(세션 디버그 관리자) 및 IDE에 알립니다. 이러한 이벤트는 SDM 및 IDE의 여가 시간에 처리됩니다. 이벤트가 처리되면 DE(디버그 엔진)에 회신이 전송되지 않습니다. IDebugOutputStringEvent2 및 IDebugMessageEvent2 인터페이스는 비동기 이벤트의 예입니다.
동기 이벤트
디버깅 중인 애플리케이션의 상태가 변경되고 있음을 SDM 및 IDE에 알립니다. 이러한 이벤트와 비동기 이벤트의 유일한 차이점은 ContinueFromSynchronousEvent 메서드를 통해 회신을 보낸다는 것입니다.
동기 이벤트를 보내는 것은 IDE가 이벤트를 수신하고 처리한 후 DE가 처리를 계속해야 하는 경우에 유용합니다.
동기적 정지 이벤트 또는 일반 정지 이벤트
디버그 중인 애플리케이션이 코드 실행을 중지했음을 SDM 및 IDE에 알립니다. 이벤트 메서드를 사용하여 중지 이벤트를 보내는 경우 IDebugThread2 매개 변수가 필요합니다. 중지 이벤트는 다음 방법 중 하나를 호출하여 계속됩니다.
-
IDebugBreakpointEvent2 및 IDebugExceptionEvent2 인터페이스는 이벤트를 중지하는 예입니다.
비고
비동기 중지 이벤트는 지원되지 않습니다. 비동기 중지 이벤트를 보내는 것은 오류입니다.
토론(Discussion)
이벤트의 실제 구현은 DE의 디자인에 따라 달라집니다. 전송된 각 이벤트의 형식은 DE를 디자인할 때 설정되는 특성에 따라 결정됩니다. 예를 들어 한 DE는 IDebugProgramCreateEvent2 를 비동기 이벤트로 보낼 수 있으며, 다른 DE는 IDebugProgramCreateEvent2를 중지 이벤트로 보낼 수 있습니다.
다음 표에서는 이벤트 유형뿐만 아니라 이벤트에 필요한 프로그램 및 스레드 매개 변수를 지정합니다. 모든 이벤트는 동기식일 수 있습니다. 어떤 이벤트도 동기적일 필요가 없습니다.
비고
IDebugEngine2 인터페이스는 모든 이벤트에 필요합니다.
| Event | IDebugProgram2 | IDebugThread2 | 이벤트 중지 |
|---|---|---|---|
| IDebugActivateDocumentEvent2 | 허용되지만 필수는 아닙니다. | 허용되지만 필수는 아닙니다. | 아니오 |
| IDebugBreakEvent2 | 필수 | 필수 | Yes |
| IDebugBreakpointBoundEvent2 | 허용되지만 필수는 아닙니다. | 허용되지만 필수는 아닙니다. | 아니오 |
| IDebugBreakpointErrorEvent2 | 허용되지만 필수는 아닙니다. | 허용되지만 필수는 아닙니다. | 아니오 |
| IDebugBreakpointUnboundEvent2 | 허용되지만 필수는 아닙니다. | 허용되지만 필수는 아닙니다. | 아니오 |
| IDebugBreakpointEvent2 | 필수 | 필수 | Yes |
| IDebugCanStopEvent2 | 필수 | 필수 | 아니오 |
| IDebugDocumentTextEvents2 | 허용되지 않음 | 허용되지 않음 | 아니오 |
| IDebugEngineCreateEvent2 | 허용되지 않음 | 허용되지 않음 | 아니오 |
| IDebugEntryPointEvent2 | 필수 | 필수 | Yes |
| IDebugErrorEvent2 | 허용되지만 필수는 아닙니다. | 허용되지만 필수는 아닙니다. | 사용할 수 있습니다. |
| IDebugExceptionEvent2 | 필수 | 필수 | Yes |
| IDebugExpressionEvaluationCompleteEvent2 | 허용되지만 필수는 아닙니다. | 허용되지만 필수는 아닙니다. | 사용할 수 있습니다. |
| IDebugInterceptExceptionCompleteEvent2 | 필수 | 필수 | Yes |
| IDebugLoadCompleteEvent2 | 필수 | 필수 | Yes |
| IDebugMessageEvent2 | 허용되지만 필수는 아닙니다. | 허용되지만 필수는 아닙니다. | 사용할 수 있습니다. |
| IDebugModuleLoadEvent2 | 필수 | 허용되지만 필수는 아닙니다. | 아니오 |
| IDebugOutputStringEvent2 | 허용되지만 필수는 아닙니다. | 허용되지만 필수는 아닙니다. | 아니오 |
| IDebugProgramCreateEvent2 | 필수 | 허용되지만 필수는 아닙니다. | 아니오 |
| IDebugProgramDestroyEvent2 | 필수 | 허용되지만 필수는 아닙니다. | 아니오 |
| IDebugPropertyCreateEvent2 | 필수 | 허용되지만 필수는 아닙니다. | 아니오 |
| IDebugPropertyDestroyEvent2 | 필수 | 허용되지만 필수는 아닙니다. | 아니오 |
| IDebugReturnValueEvent2 | 허용되지만 필수는 아닙니다. | 허용되지만 필수는 아닙니다. | 아니오 |
| IDebugStopCompleteEvent2 | 필수 | 필수 | Yes |
| IDebugStepCompleteEvent2 | 필수 | 필수 | Yes |
| IDebugSymbolSearchEvent2 | 허용되지만 필수는 아닙니다. | 허용되지만 필수는 아닙니다. | 아니오 |
| IDebugThreadCreateEvent2 | 필수 | 필수 | 아니오 |
| IDebugThreadDestroyEvent2 | 필수 | 필수 | 아니오 |
| IDebugThreadNameChangedEvent2 | 허용되지만 필수는 아닙니다. | 허용되지만 필수는 아닙니다. | 아니오 |