Tipos de eventos com suporte
No momento Visual Studio de depuração suporta os seguintes tipos de eventos:
Eventos assíncronos
Notificar o Gerenciador de sessão de depuração (SDM) e IDE que está alterando o estado do aplicativo que está sendo depurado. Esses eventos são processados no tempo livre do SDM e o IDE. Nenhuma resposta é enviada para o mecanismo de depuração (DE) uma vez que o evento seja processado. O IDebugOutputStringEvent2 e IDebugMessageEvent2 interfaces são exemplos de eventos assíncronos.
Eventos síncronos
Notifica o SDM e IDE que está alterando o estado do aplicativo que está sendo depurado. A única diferença entre esses eventos e os eventos assíncronos é que uma resposta é enviada por meio do IDebugEngine2::ContinueFromSynchronousEvent método.
Envio de um evento síncrono é útil se você precisar seu DE continue processando depois que o IDE recebe e processa o evento.
Síncrono parando eventos ou interrompendo eventos
Notifica o SDM e o IDE que o aplicativo que está sendo depurado parou a execução do código. Quando você envia um evento de parada por meio do método IDebugEventCallback2::Event, o IDebugThread2 parâmetro é obrigatório. A interrupção de eventos continuam por uma chamada para um dos seguintes métodos:
As interfaces IDebugBreakpointEvent2 e IDebugExceptionEvent2 são exemplos de eventos de interrupção.
Dica
Eventos de interrupção assíncrona não são suportados.Ele é um erro para enviar um evento de interrupção assíncrono.
Discussão
A implementação real de eventos depende do design do seu DE. O tipo de cada evento enviado é determinado por seus atributos, que são definidos durante a criação DE. Por exemplo, um DE pode enviar um IDebugProgramCreateEvent2 como um evento assíncrono, enquanto outro pode enviá-lo como um evento de parada.
A tabela a seguir especifica quais parâmetros do programa e thread são necessários para a qual eventos, bem como os tipos de eventos. Qualquer evento pode ser síncrono. Nenhum evento precisa ser síncrona.
Dica
O IDebugEngine2 interface é necessária para todos os eventos.
Evento |
IDebugProgram2 |
IDebugThread2 |
Interrompendo a eventos |
---|---|---|---|
Permitido, mas não necessariamente |
Permitido, mas não necessariamente |
Não |
|
Necessário |
Necessário |
Sim |
|
Permitido, mas não necessariamente |
Permitido, mas não necessariamente |
Não |
|
Permitido, mas não necessariamente |
Permitido, mas não necessariamente |
Não |
|
Permitido, mas não necessariamente |
Permitido, mas não necessariamente |
Não |
|
Necessário |
Necessário |
Sim |
|
Necessário |
Necessário |
Não |
|
Não permitido |
Não permitido |
Não |
|
Não permitido |
Não permitido |
Não |
|
Necessário |
Necessário |
Sim |
|
Permitido, mas não necessariamente |
Permitido, mas não necessariamente |
Pode ser |
|
Necessário |
Necessário |
Sim |
|
Permitido, mas não necessariamente |
Permitido, mas não necessariamente |
Pode ser |
|
Necessário |
Necessário |
Sim |
|
Necessário |
Necessário |
Sim |
|
Permitido, mas não necessariamente |
Permitido, mas não necessariamente |
Pode ser |
|
Necessário |
Permitido, mas não necessariamente |
Não |
|
Permitido, mas não necessariamente |
Permitido, mas não necessariamente |
Não |
|
Necessário |
Permitido, mas não necessariamente |
Não |
|
Necessário |
Permitido, mas não necessariamente |
Não |
|
Necessário |
Permitido, mas não necessariamente |
Não |
|
Necessário |
Permitido, mas não necessariamente |
Não |
|
Permitido, mas não necessariamente |
Permitido, mas não necessariamente |
Não |
|
IDebugStopCompleteEvent2 |
Necessário |
Necessário |
Sim |
Necessário |
Necessário |
Sim |
|
Permitido, mas não necessariamente |
Permitido, mas não necessariamente |
Não |
|
Necessário |
Necessário |
Não |
|
Necessário |
Necessário |
Não |
|
Permitido, mas não necessariamente |
Permitido, mas não necessariamente |
Não |