Iniciar um programa
Os usuários que desejam depurar um programa podem pressionar F5 para realizar a execução do depurador do IDE. Isso inicia uma série de eventos que, em última análise, resultam na conexão do IDE a um mecanismo de depuração (DE), que, por sua vez, é conectado ou anexado ao programa da seguinte maneira:
Primeiro, o IDE chama o pacote do projeto para obter as configurações de depuração do projeto ativo da solução. As configurações incluem o diretório inicial, as variáveis de ambiente, a porta na qual o programa será executado e o DE a ser usado para criar o programa, se especificado. Essas configurações são transmitidas para o pacote de depuração.
Se um DE estiver especificado, o DE chamará o sistema operacional para iniciar o programa. Como consequência da inicialização do programa, o ambiente de tempo de execução do programa será carregado. Por exemplo, se um programa for escrito em MSIL, o Common Language Runtime será invocado para realizar a execução do programa.
-ou-
Se um DE não estiver especificado, a porta chamará o sistema operacional para iniciar o programa, o que faz com que o ambiente de tempo de execução do programa seja carregado.
Observação
Se um DE for usado para iniciar um programa, é provável que o mesmo DE seja conectado ao programa.
Dependendo de se foi o DE ou a porta que iniciou o programa, o DE ou o ambiente de tempo de execução cria uma descrição do programa, ou nó, e notifica a porta de que o programa está em execução.
Observação
A recomendação é para que o ambiente de tempo de execução crie o nó do programa, pois o nó do programa é uma representação compacta de um programa que pode ser depurado. Não há necessidade de carregar um DE completo somente para realizar a criação e o registro de um nó do programa. Se o DE for projetado para ser executado no processo do IDE, mas nenhum IDE estiver realmente em execução, será necessário um componente que possa adicionar um nó do programa à porta.
O programa criado recentemente em conjunto com outros programas, relacionados ou não, iniciados ou conectados usando o mesmo IDE, compõem uma sessão de depuração.
De forma programática, quando o usuário pressiona F5 pela primeira vez, o pacote de depuração do Visual Studio chama o pacote do projeto (que está associado ao tipo de programa que está sendo iniciado) por meio do método DebugLaunch, que, por sua vez, preenche uma estrutura VsDebugTargetInfo2 com as configurações de depuração do projeto ativo da solução. Essa estrutura é transferida de volta ao pacote de depuração por meio de uma chamada para o método LaunchDebugTargets2. Em seguida, o pacote de depuração cria uma instância para o gerenciador de depuração de sessão (SDM), que inicia o programa que está sendo depurado e os mecanismos de depuração associados.
Um dos argumentos transferidos ao SDM é o GUID do DE a ser utilizado para iniciar o programa.
Se o GUID do DE não for
GUID_NULL
, o SDM criará em conjunto com o DE e, em seguida, chamará o método LaunchSuspended para iniciar o programa. Por exemplo, se um programa for escrito em código nativo,IDebugEngineLaunch2::LaunchSuspended
provavelmente chamaráCreateProcess
eResumeThread
(que são funções do Win32) para realizar a execução do programa.Como consequência da inicialização do programa, o ambiente de tempo de execução do programa será carregado. Em seguida, o DE ou o ambiente de tempo de execução cria uma interface IDebugProgramNode2 para descrever o programa e transfere essa interface para AddProgramNode com a finalidade de notificar a porta de que o programa está em execução.
Se
GUID_NULL
for transferido, a porta iniciará o programa. Uma vez que o programa esteja em execução, o ambiente de tempo de execução cria uma interfaceIDebugProgramNode2
para descrever o programa e a transfere paraIDebugPortNotify2::AddProgramNode
. Isso notifica a porta de que o programa está em execução. Em seguida, o SDM anexa o mecanismo de depuração ao programa em execução.
Nesta seção
A página Notifying the port explica o que acontece depois que um programa é iniciado e a porta é notificada.
A página Attaching after a launch documenta quando a sessão de depuração está pronta para anexar o DE ao programa.
Conteúdo relacionado
- As tarefas de depuração contêm links para várias tarefas de depuração, como iniciar um programa e avaliar expressões.