Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Quando você depurar 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 simultaneamente e de forma independente. Este artigo descreve como depurar extensões criadas com o SDK VisualStudio.Extensibility quando elas estão sendo executadas na instância experimental do IDE do Visual Studio.
Processos de extensão
O processo de depuração difere ligeiramente dependendo se sua extensão é executada dentro ou fora do processo. Consulte Criar sua primeira extensão VisualStudio.Extensibility compatível com VSSDK. Com uma extensão fora do processo, sua extensão é executada em um processo dedicado para extensões do Visual Studio. Esse processo, chamado Microsoft.ServiceHub.Host.Extensibility, intermedia toda a comunicação entre o processo 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. Você geralmente não precisa se preocupar com o processo exato porque, ao iniciar o depurador de um projeto de extensão pressionando F5 na IDE do Visual Studio, o Visual Studio localiza o processo certo para conectar o depurador.
Quando se inicia uma sessão de depuração, o conjunto de extensão e os seus símbolos não são carregados imediatamente. Antes que sua extensão seja carregada, o Visual Studio controla os locais onde a extensão pode ser ativada. Essas informações são gerenciadas em uma instância interna do VisualStudioContribution. Mesmo antes de sua extensão carregar, 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 da barra de ferramentas ou carrega um arquivo de um determinado tipo no editor. A assemblagem da sua extensão não será carregada até ser ativada no IDE. Portanto, ao depurar, a primeira coisa que tens de fazer é realizar uma ação no IDE do Visual Studio para carregar a extensão. Por exemplo, talvez seja necessário selecionar o item de menu ou o botão da barra de ferramentas da extensão. Nesse ponto, o seu assembly de extensão é carregado, o código de inicialização é executado e você pode atingir pontos de paragem 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, bem como 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 sua extensão; Os quadros de pilha do Visual Studio estão em um processo separado. Visual Studio chama a sua extensão através de interfaces compatíveis com JsonRpc, o host ServiceHub encaminha a chamada, e então a execução no seu processo começa na chamada de retorno. O controlo retorna ao Visual Studio quando o callback é executado.
O estado é passado à sua extensão em vários métodos, segundo a necessidade, e encapsulado por uma instância IClientContext para fácil uso, mas é importante ter em mente que se trata de um instantâneo do estado, que pode mudar entre o momento do instantâneo e o momento em que você o está lendo pelo código da extensão ou visualizando-o no depurador.
Há algum código interno no processo de host do ServiceHub que lida com a intermediação RPC (Remote Procedure Call). Se ocorrer uma falha nessa camada, ela não será visível para você. Tais 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
InitializeServicesda extensão na 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; simultaneamente, o processo host 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.
Visual Studio para em um ponto de interrupção.
Sugestão
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 tornar 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 Diagnostics Explorer
Consulte VisualStudio.Extensibility Diagnostics Explorer para obter mais informações.
Solução de problemas
Ao iniciar o depurador, se você vir o erro Esta extensão não é suportada no produto atual, abra o .vsixmanifest arquivo e verifique o InstallationTarget elemento. O destino Microsoft.VisualStudio.IntegratedShell da instalação não é suportado, use Microsoft.VisualStudio.Community em vez disso. Consulte Referência do esquema de extensão VSIX 2.0.