Tipos de evento admitidos
Actualmente, la depuración de Visual Studio admite los siguientes tipos de eventos:
Eventos asincrónicos
Notifican al administrador de depuración de sesión (SDM) y al IDE que el estado de la aplicación que se está depurando está cambiando. Estos eventos se procesan a discreción del SDM y del IDE. No se envía ninguna respuesta al motor de depuración (DE) una vez procesado el evento. Las interfaces IDebugOutputStringEvent2 e IDebugMessageEvent2 son ejemplos de eventos asincrónicos.
Eventos sincrónicos
Notifican al SDM y al IDE que el estado de la aplicación que se está depurando está cambiando. La única diferencia entre estos eventos y los asincrónicos es que se envía una respuesta mediante el método ContinueFromSynchronousEvent.
Enviar un evento sincrónico es útil si necesita que el DE continúe procesando después de que el IDE reciba y procese el evento.
Eventos de detención sincrónicos o eventos de detención
Notifican al SDM y al IDE que la aplicación que se está depurando ha dejado de ejecutar código. Cuando se envía un evento de detención mediante el método Event, se requiere el parámetro IDebugThread2. A los eventos de detención les sigue una llamada a uno de los métodos siguientes:
-
Las interfaces IDebugBreakpointEvent2 e IDebugExceptionEvent2 son ejemplos de eventos de detención.
Nota:
No se admiten eventos de detención asincrónicos. Es un error enviar un evento de detención asincrónico.
Debate
La implementación real de los eventos depende del diseño del DE. El tipo de cada evento enviado viene determinado por sus atributos, que se establecen al diseñar el DE. Por ejemplo, un DE puede enviar un IDebugProgramCreateEvent2 como un evento asincrónico, mientras que otro puede enviarlo como evento de detención.
En la tabla siguiente se especifica qué parámetros de programa y subproceso son necesarios para qué eventos, así como los tipos de eventos. Cualquier evento puede ser sincrónico. No es necesario que ningún evento sea sincrónico.
Nota:
La interfaz IDebugEngine2 es necesaria para todos los eventos.
Evento | IDebugProgram2 | IDebugThread2 | Eventos de detención |
---|---|---|---|
IDebugActivateDocumentEvent2 | Permitido, pero no obligatorio | Permitido, pero no obligatorio | No |
IDebugBreakEvent2 | Obligatorio | Obligatorio | Sí |
IDebugBreakpointBoundEvent2 | Permitido, pero no obligatorio | Permitido, pero no obligatorio | No |
IDebugBreakpointErrorEvent2 | Permitido, pero no obligatorio | Permitido, pero no obligatorio | No |
IDebugBreakpointUnboundEvent2 | Permitido, pero no obligatorio | Permitido, pero no obligatorio | No |
IDebugBreakpointEvent2 | Obligatorio | Obligatorio | Sí |
IDebugCanStopEvent2 | Obligatorio | Obligatorio | No |
IDebugDocumentTextEvents2 | No permitida | No permitida | No |
IDebugEngineCreateEvent2 | No permitida | No permitida | No |
IDebugEntryPointEvent2 | Obligatorio | Obligatorio | Sí |
IDebugErrorEvent2 | Permitido, pero no obligatorio | Permitido, pero no obligatorio | Puede ser |
IDebugExceptionEvent2 | Obligatorio | Obligatorio | Sí |
IDebugExpressionEvaluationCompleteEvent2 | Permitido, pero no obligatorio | Permitido, pero no obligatorio | Puede ser |
IDebugInterceptExceptionCompleteEvent2 | Obligatorio | Obligatorio | Sí |
IDebugLoadCompleteEvent2 | Obligatorio | Obligatorio | Sí |
IDebugMessageEvent2 | Permitido, pero no obligatorio | Permitido, pero no obligatorio | Puede ser |
IDebugModuleLoadEvent2 | Obligatorio | Permitido, pero no obligatorio | No |
IDebugOutputStringEvent2 | Permitido, pero no obligatorio | Permitido, pero no obligatorio | No |
IDebugProgramCreateEvent2 | Obligatorio | Permitido, pero no obligatorio | No |
IDebugProgramDestroyEvent2 | Obligatorio | Permitido, pero no obligatorio | No |
IDebugPropertyCreateEvent2 | Obligatorio | Permitido, pero no obligatorio | No |
IDebugPropertyDestroyEvent2 | Obligatorio | Permitido, pero no obligatorio | No |
IDebugReturnValueEvent2 | Permitido, pero no obligatorio | Permitido, pero no obligatorio | No |
IDebugStopCompleteEvent2 | Obligatorio | Obligatorio | Sí |
IDebugStepCompleteEvent2 | Obligatorio | Obligatorio | Sí |
IDebugSymbolSearchEvent2 | Permitido, pero no obligatorio | Permitido, pero no obligatorio | No |
IDebugThreadCreateEvent2 | Obligatorio | Obligatorio | No |
IDebugThreadDestroyEvent2 | Obligatorio | Obligatorio | No |
IDebugThreadNameChangedEvent2 | Permitido, pero no obligatorio | Permitido, pero no obligatorio | No |