Partilhar via


Sessão de depuração e modelo de execução

O mecanismo do depurador pode depurar vários alvos, simultaneamente. Uma sessão de depuração começa quando o motor adquire um alvo e continua até que todos os alvos tenham sido descartados. Uma sessão de depuração fica inacessível enquanto os destinos estão em execução e acessível quando o destino atual está suspenso. O motor só pode ser usado para examinar e manipular alvos enquanto a sessão estiver acessível.

O loop principal de um depurador normalmente consiste em definir o status de execução, chamar o método WaitForEvent e manipular os eventos gerados. Quando WaitForEvent é chamado, a sessão torna-se inacessível.

Quando um evento ocorre em um destino, o mecanismo suspende todos os destinos e a sessão se torna acessível. Em seguida, o motor notifica os callbacks do evento e segue as regras de filtro de eventos. Os callbacks de eventos e os filtros de eventos determinam como a execução no alvo deve prosseguir. Se eles determinarem que o mecanismo deve invadir o depurador, o método WaitForEvent retornará e a sessão permanecerá acessível; caso contrário, o mecanismo retomará a execução do destino da maneira determinada pelos retornos de chamada de eventos e filtros de eventos, e a sessão ficará inacessível novamente.

Durante a chamada WaitForEvent - em particular, ao notificar os retornos de chamada do evento e processar as regras de filtro - o mecanismo está num estado referido como "dentro de uma espera". Enquanto estiver neste estado, WaitForEvent não pode ser chamado (não é reentrante).

Há duas etapas envolvidas no início da execução em um destino: definir o status de execução e, em seguida, chamar WaitForEvent. O status de execução pode ser definido usando o método SetExecutionStatus ou executando um comando de depurador que define o status de execução - por exemplo, g(Go) e p (Step).

Se uma sequência de comandos do depurador for executada em conjunto - por exemplo, "g ; ? @$ip"--uma espera implícita ocorrerá após qualquer comando que exija execução no destino se esse comando não for o último comando na sequência. Uma espera implícita não pode ocorrer quando o mecanismo do depurador está em estado de espera; neste caso, a execução dos comandos será interrompida e o comando atual - aquele que tentou causar a espera implícita - será interpretado como uma indicação de como a execução no alvo deve prosseguir. O restantes comandos serão descartados.

Observação Ao determinar se a sessão está acessível ou inacessível, a execução limitada de um alvo (por exemplo, deslocamento) é considerada execução pelo motor. Quando a execução limitada estiver concluída, a sessão torna-se acessível.

Mecanismo host

Ao depurar remotamente, você pode usar várias instâncias do mecanismo do depurador. Exatamente uma dessas instâncias mantém a sessão de depuração; essa instância é chamada de motor anfitrião.

Todas as operações do depurador são relativas ao mecanismo anfitrião, por exemplo, carregamento de símbolos e carregamento de extensão.