Compartilhar via


Modelo de execução e sessão de depuraçã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 é 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 main de um depurador normalmente consiste em definir o status de execução, chamando o método WaitForEvent e manipulando os eventos gerados. Quando WaitForEvent é chamado, a sessão se torna 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 ser dividido 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 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 chamado "dentro de uma espera". Enquanto estiver 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 de depurador que define a execução status, 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 a 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á 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 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, etapas) é considerada a execução pelo mecanismo. Quando a execução limitada for concluída, a sessão se tornará acessível.

Mecanismo de Host

Ao depurar remotamente, você pode usar várias instâncias do mecanismo de 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.