Depuração de sessão e modelo de execução

O mecanismo do depurador pode depurar vários destinos simultaneamente. Uma sessão de depuração começa quando o mecanismo adquire um destino e continua até que todos os destinos sejam descartados. Uma sessão de depuração fica inacessível enquanto os destinos estão em execução e acessíveis quando o destino atual é suspenso. O mecanismo só pode ser usado para examinar e manipular destinos enquanto a sessão está 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 fica 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 mecanismo notifica os retornos de chamada de evento do evento e segue as regras de filtro de evento. Os retornos de chamada de evento e os filtros de evento determinam como a execução no destino deve continuar. Se eles determinarem que o mecanismo deve entrar no 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 evento e pelos filtros de evento, e a sessão se tornará inacessível novamente.

Durante a chamada WaitForEvent , em particular, ao notificar os retornos de chamada de evento e processar as regras de filtro, o mecanismo está em um estado conhecido como "dentro de uma espera". Nesse 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 do depurador que define o status de execução– por exemplo, g(Go) e p (Etapa).

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á no estado "dentro de uma espera"; nesse caso, a execução dos comandos será parada e o comando atual, aquele que tentou causar a espera implícita, será interpretado como uma indicação de como a execução no destino deve continuar. O restante dos comandos será descartado.

Nota Ao determinar se a sessão está acessível ou inacessível, a execução limitada de um destino (por exemplo, passo a passo) é considerada execução pelo mecanismo. Quando a execução limitada for concluída, a sessão ficará acessível.

Mecanismo de 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 mecanismo de host.

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