Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Quando você depura uma extensão do Visual Studio, uma instância especial do Visual Studio chamada Instância Experimental é usada para hospedar sua extensão enquanto você executa o depurador no IDE principal do Visual Studio. As duas instâncias são executadas de forma independente lado a lado. Este artigo descreve como depurar extensões criadas com o SDK VisualStudio.Extensibility quando elas estão em execução na instância experimental do IDE do Visual Studio.
Processos de extensão
O processo de depuração difere ligeiramente dependendo se a extensão é executada em processo ou fora do processo. Consulte Criar sua primeira extensão VisualStudio.Extensibility compatível com VSSDK. Com uma extensão fora de processo, sua extensão é executada em um processo dedicado para extensões do Visual Studio. Esse processo, chamado Microsoft.ServiceHub.Host.Extensibility, agencia toda a comunicação entre o processo de IDE do Visual Studio e o processo que está hospedando sua extensão. Quando você inicia uma extensão usando F5, o Visual Studio inicia a Instância Experimental do Visual Studio e se conecta ao processo que hospeda sua extensão. Normalmente, você não precisa se preocupar com o processo exato, pois quando você inicia o depurador de um projeto de extensão pressionando F5 o IDE do Visual Studio, o Visual Studio localiza o processo certo para conectar o depurador.
Quando você inicia uma sessão de depuração, o assembly de extensão e seus símbolos não são carregados imediatamente. Antes do carregamento da extensão, o Visual Studio controla os locais onde a extensão pode ser ativada. Essas informações são gerenciadas em uma instância interna de VisualStudioContribution. Mesmo antes do carregamento da extensão, o Visual Studio tem informações sobre onde ela pode ser ativada, como quando o usuário escolhe um item de menu específico, pressiona um botão de barra de ferramentas ou carrega um arquivo de um determinado tipo no editor. A montagem da extensão não será carregada até que ela seja ativada na IDE. Portanto, ao depurar, a primeira coisa que você precisa fazer é executar uma ação no IDE do Visual Studio para disparar a extensão a ser carregada. Por exemplo, talvez seja necessário selecionar o item de menu da extensão ou o botão da barra de ferramentas. Nesse ponto, o assembly de extensão é carregado, o código de inicialização é executado e você pode atingir pontos de interrupção e percorrer o código. O primeiro código a ser executado em sua extensão é o InitializeAsync método na Extension classe e o próximo método é InitializeServices.
Processos e pilhas de chamadas
Se a sua extensão estiver em execução, a pilha de chamadas incluirá frames da pilha do Visual Studio, assim como os frames da pilha da sua extensão. Os símbolos normalmente não estão disponíveis para o Visual Studio, mas você pode ver as chamadas em que o Visual Studio chama sua extensão.
Com uma extensão fora do processo, você só vê a pilha de chamadas da extensão; Os quadros de pilha do Visual Studio estão em um processo separado. O Visual Studio chama sua extensão por meio de interfaces compatíveis com JsonRpc, o host do ServiceHub roteia a chamada e, em seguida, a execução em seu processo começa no callback. O controle retorna ao Visual Studio quando o retorno de chamada é executado.
O estado é passado para sua extensão em vários métodos conforme necessário e envolvido por uma instância de IClientContext para facilitar o uso, mas é importante considerar que é um instantâneo do estado, o qual pode mudar entre o momento do instantâneo e o momento em que você o está lendo do código de extensão ou exibindo-o no depurador.
Há algum código interno no processo de host do ServiceHub que manipula a intermediação de RPC (Chamada de Procedimento Remoto). Se ocorrer uma falha nessa camada, ela não estará visível para você. Esses erros devem ser relatados como problemas do produto.
Depurar a extensão na instância experimental do Visual Studio
Abra o projeto de extensão.
Configure um ponto de interrupção, por exemplo, no método
InitializeServicesem sua extensão da classe principal derivada deExtension. Para definir um ponto de interrupção em uma linha de código, clique na linha e pressioneF9.No menu principal, escolha Depurar > Iniciar Depuração ou pressione
F5. A Instância Experimental do Visual Studio é iniciada; ao mesmo tempo, o processo de hospedagem do ServiceHub é iniciado.Execute as etapas na instância experimental do Visual Studio que fazem com que sua extensão seja ativada ou reproduza o cenário que você pretende depurar.
O Visual Studio para em um ponto de interrupção.
Dica
Pode ser conveniente ter vários monitores, para que você possa ver o depurador e a instância experimental ao mesmo tempo em dois monitores diferentes. Talvez você queira alterar o tema na Instância Experimental para torná-lo mais óbvio com qual IDE você está trabalhando a qualquer momento. Consulte Alterar fontes, cores e temas no Visual Studio.
Depurar a extensão usando o Gerenciador de Diagnósticos
Consulte VisualStudio.Extensibility Diagnostics Explorer para obter mais informações.
Resolução de problemas
Ao iniciar o depurador, se você vir o erro Essa extensão não tem suporte no produto atual, abra o .vsixmanifest arquivo e verifique o InstallationTarget elemento. Não há suporte para o destino Microsoft.VisualStudio.IntegratedShell de instalação; use Microsoft.VisualStudio.Community em vez disso. Consulte a referência do esquema de extensão VSIX 2.0.