Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La depuración de Visual Studio admite actualmente los siguientes tipos de eventos:
Eventos asincrónicos
Notifique 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
Notificar al SDM y al IDE que el estado de la aplicación que está siendo depurada está cambiando. La única diferencia entre estos eventos y eventos 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ónica o eventos de detención
Notifique al SDM y al entorno de desarrollo integrado (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 . Los eventos de detención se continúan mediante una llamada a uno de los siguientes métodos:
-
Las interfaces IDebugBreakpointEvent2 e IDebugExceptionEvent2 son ejemplos de eventos de detención.
Nota:
No se admiten eventos de parada asincrónica. Es un error enviar un evento de detención asincrónica.
Debate
La implementación real de 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.
| Event | IDebugProgram2 | IDebugThread2 | Detener eventos |
|---|---|---|---|
| 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 |