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.
Ao depurar uma aplicação .NET, poderá achar que deseja visualizar código-fonte que não possui. Por exemplo, interromper numa exceção ou usar a pilha de chamadas para navegar até uma localização de origem.
Observação
- A geração de código-fonte (descompilação) só está disponível para aplicativos .NET e é baseada no projeto ILSpy de código aberto.
- A descompilação só está disponível no Visual Studio 2019 16.5 e posterior.
- A aplicação do atributo SuppressIldasmAttribute a um assembly ou módulo impede que o Visual Studio tente a descompilação. Embora o atributo esteja obsoleto no .NET 6 e posterior, o Visual Studio honra o atributo.
Gerar código-fonte
Quando estiver a depurar e não houver código-fonte disponível, o Visual Studio mostra o documento Source Not Found ou, se não tiver símbolos para a assemblagem, o documento No Symbols Loaded. Ambos os documentos têm uma opção Descompilar código-fonte que gera código C# para o local atual. O código C# gerado pode então ser usado como qualquer outro código-fonte. Você pode visualizar o código, inspecionar variáveis, definir pontos de interrupção e assim por diante.
Nenhum símbolo carregado
A ilustração a seguir mostra a mensagem No Symbols Loaded .
Fonte não encontrada
A ilustração a seguir mostra a mensagem Fonte não encontrada .
Código de descompilação automática
A partir do Visual Studio 2022 versão 17.7, o Depurador do Visual Studio oferece suporte à descompilação automática de código .NET externo. Você pode descompilar automaticamente ao entrar em código externo ou ao usar a janela Pilha de chamadas.
Se você entrar no código que foi implementado externamente, o depurador o descompilará automaticamente e exibirá o ponto de execução atual. Se você quiser entrar em código externo, desative Just My Code.
Você pode descompilar a partir da janela Pilha de chamadas sem desativar o Just My Code.
Para descompilar automaticamente a partir da janela Pilha de Chamadas:
Durante a depuração com a janela Pilha de Chamadas aberta, selecione Mostrar Código Externo.
Na janela Pilha de chamadas, clique duas vezes em qualquer quadro de pilha. O depurador descompila o código e, em seguida, navega diretamente para o ponto atual de execução.
Todo o código descompilado também é mostrado sob o nó Fontes Externas no Gerenciador de Soluções, facilitando a navegação pelos arquivos externos, se necessário.
Você pode depurar o código descompilado e definir pontos de interrupção.
Para desativar a descompilação automática de código externo:
Abra o painel Ferramentas>Opções e expanda a Todos os Ajustes>Depuração>Geral seção.
No painel direito, desmarque a caixa de seleção Descompilar automaticamente para o código-fonte quando necessário (Somente gerenciado).
Abra a caixa de diálogo Ferramentas>Opções e expanda a seção Depuração>Geral.
No painel direito, desmarque a caixa de seleção Descompilar automaticamente para o código-fonte quando necessário (Somente gerenciado).
Selecione OK.
Gerar e incorporar fontes para um assembly
Além de gerar código-fonte para um local específico, você pode gerar todo o código-fonte para um determinado assembly .NET. Para fazer essa tarefa, vá para a janela Módulos e no menu de contexto de um assembly .NET e, em seguida, selecione o comando Descompilar fonte para arquivo de símbolo . Visual Studio gera um ficheiro de símbolos para a montagem e, em seguida, incorpora o código-fonte no ficheiro de símbolos. Em uma etapa posterior, você pode extrair o código-fonte incorporado.
Extrair e visualizar o código-fonte incorporado
Você pode extrair arquivos de origem incorporados em um arquivo de símbolo usando o comando Extrair código-fonte no menu de contexto da janela Módulos .
Os arquivos de origem extraídos são adicionados à solução como arquivos diversos. O recurso de arquivos diversos está desativado por padrão no Visual Studio. Se o recurso não estiver habilitado, você não poderá abrir o código-fonte extraído.
Você pode ativar o recurso no menuOpções de >.
Abra o painel Ferramentas>Opções e expanda a seção Todas as Configurações>Ambiente>Documentos.
No painel direito, marque ou desmarque a caixa de seleção Mostrar arquivos diversos no Gerenciador de Soluções .
Se você selecionar a opção, poderá especificar o número de itens salvos no projeto Miscellaneous files.
Para aplicar as alterações, reinicie o Visual Studio.
Abra o diálogo Ferramentas>Opções e expanda a seção Ambiente>Documentos.
No painel direito, marque ou desmarque a caixa de seleção Mostrar arquivos diversos no Gerenciador de Soluções .
Se você selecionar a opção, poderá especificar o número de itens salvos no projeto Miscellaneous files.
Selecione OK.
Os arquivos de origem extraídos aparecem nos arquivos diversos no Gerenciador de Soluções.
FonteLink
Para bibliotecas .NET ou para pacotes NuGet habilitados para SourceLink, você também pode entrar no código-fonte, definir pontos de interrupção e usar todos os recursos do depurador. Para obter mais informações, consulte Ativar a depuração e diagnóstico com o Source Link e Aumentar a produtividade durante a depuração com o Source Link.
Limitações conhecidas
Limitações de descompilação
A geração de código-fonte a partir do formato intermediário (IL) usado em assemblies .NET tem algumas limitações inerentes. Como tal, o código-fonte gerado não se parece com o código-fonte original. A maioria das diferenças está em locais onde as informações no código-fonte original não são necessárias em tempo de execução. Por exemplo, informações como espaço em branco, comentários e nomes de variáveis locais não são necessárias no tempo de execução. Recomendamos que você use a fonte gerada para entender como o programa está sendo executado e não como um substituto para o código-fonte original.
Depurar ou liberar assemblies
Ao depurar código descompilado de um assembly que foi compilado usando otimizações do compilador, você pode se deparar com os seguintes problemas:
- Os pontos de interrupção nem sempre se ligam ao local de origem correspondente.
- O passo talvez nem sempre vá para o local correto.
- As variáveis locais podem não ter nomes precisos.
- Algumas variáveis podem não estar disponíveis para avaliação.
Mais detalhes podem ser encontrados na edição do GitHub: ICSharpCode.Decompiler integration into VS Debugger.
Fiabilidade da descompilação
Uma percentagem relativamente pequena de tentativas de descompilação pode resultar em falha. Esse comportamento é devido a um erro de referência nula de ponto de sequência no ILSpy. Nós mitigamos a falha pegando esses problemas e falhando graciosamente na tentativa de descompilação.
Mais detalhes podem ser encontrados na edição do GitHub: ICSharpCode.Decompiler integration into VS Debugger.
Limitações com código assíncrono
Os resultados da descompilação de módulos com padrões de código async/await podem ser incompletos ou falhar completamente. A implementação das máquinas de estados ILSpy para async/await e yield está apenas parcialmente concluída.
Mais detalhes podem ser encontrados na edição do GitHub: PDB Generator Status.
Just My Code
A configuração Just My Code (JMC) permite que o Visual Studio passe por cima de chamadas de sistema, estrutura, biblioteca e outras chamadas de não-usuário. Durante uma sessão de depuração, a janela Módulos mostra quais módulos de código o depurador está tratando como Meu Código (código do usuário).
A descompilação de módulos otimizados ou de liberação produz código não-usuário. Se o depurador quebrar em seu código não-usuário descompilado, por exemplo, a janela Sem código-fonte será exibida. Você pode desativar o recurso Apenas Meu Código no menuOpções de > ouOpções de >.
Abra o painel Ferramentas>Opções e expanda a Todos os Ajustes>Depuração>Geral seção. Desmarque a caixa de seleção Ativar apenas meu código .
Abra a caixa de diálogo Ferramentas>Opções e expanda a seção Depuração>Geral. Desmarque a caixa de seleção Ativar apenas meu código .
Fontes extraídas
O código-fonte extraído de um assembly tem as seguintes limitações:
- O nome e a localização dos ficheiros gerados não são configuráveis.
- Os arquivos são temporários e excluídos pelo Visual Studio.
- Os arquivos são colocados em uma única pasta e qualquer hierarquia de pastas que as fontes originais tinham não é usada.
- O nome do arquivo para cada arquivo contém um hash de soma de verificação do arquivo.
O código gerado é apenas C#
A descompilação gera apenas arquivos de código-fonte em C#. Não há uma opção para gerar arquivos em qualquer outro idioma.