Compartilhar via


Depurar apenas o código do usuário com Just My Code

Just My Code é um recurso de depuração do Visual Studio que percorre automaticamente as chamadas para o sistema, o framework e outros códigos que não são do usuário. Na janela Pilha de Chamadas, Apenas Meu Código recolhe essas chamadas em quadros [Código Externo].

Just My Code funciona de forma diferente em projetos .NET e C++.

Habilitar ou desabilitar Apenas Meu Código

Para a maioria das linguagens de programação, Just My Code está habilitado por padrão.

  • Para habilitar ou desabilitar o Just My Code no Visual Studio, em Tools>Options (ou Debug>Options) >Debugging>General, selecione ou desmarque Enable Just My Code.

Captura de tela de Habilitar Apenas Meu Código na caixa de diálogo Opções.

Captura de tela de Habilitar Apenas Meu Código na caixa de diálogo Opções.

Nota

Habilitar Apenas Meu Código é uma configuração global que se aplica a todos os projetos do Visual Studio em todos os idiomas.

Depuração Apenas Meu Código

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), juntamente com seu status de carregamento de símbolo. Para obter mais informações, confira Familiarize-se mais com a forma como o depurador se anexa ao seu aplicativo.

Captura de tela do código do usuário na janela Módulos.

Captura de tela do código do usuário na janela Módulos.

Na janela Pilha de Chamadas ou Tarefas, Apenas Meu Código recolhe o código que não é de usuário em um quadro de código anotado esmaecido rotulado [External Code].

Captura de tela de Código Externo na janela Pilha de Chamadas.

Captura de tela de Código Externo na janela Pilha de Chamadas.

Dica

Para abrir Módulos, Pilha de Chamadas, Tarefas ou a maioria das outras janelas de depuração, você deve estar em uma sessão de depuração. Durante a depuração, em Depurar>Windows, selecione as janelas que deseja abrir.

Para exibir o código em um quadro [Código Externo] recolhido, clique com o botão direito na janela Pilha de Chamadas ou Tarefa e selecione Mostrar Código Externo no menu de contexto. As linhas de código externas expandidas substituem o quadro [Código Externo].

Captura de tela de Mostrar Código Externo na janela Pilha de Chamadas.

Captura de tela de Mostrar Código Externo na janela Pilha de Chamadas.

Nota

Mostrar Código Externo é uma configuração atual do perfil de usuário que se aplica a todos os projetos em todos os idiomas abertos pelo usuário.

Clicar duas vezes em uma linha de código externa expandida na janela Pilha de Chamadas realça em verde a linha de código de chamada no código-fonte. Para DLLs ou outros módulos não encontrados ou carregados, uma página de símbolo ou origem não encontrada pode ser aberta.

A partir do Visual Studio 2022 versão 17.7, você pode descompilar automaticamente código .NET dando um duplo clique no código externo na janela Pilha de Chamadas. Para obter mais informações, confira Gerar código-fonte de assemblies .NET durante a depuração.

.NET apenas meu código

Em projetos do .NET, Just My Code usa arquivos de símbolo (.pdb) e otimizações de programa para classificar o código de usuário e não usuário. O depurador .NET considera como código não pertencente ao usuário os binários otimizados e os arquivos .pdb não carregados .

Três atributos do compilador também afetam o que o depurador do .NET considera ser código de usuário:

O depurador .NET considera todos os outros códigos como código de usuário.

Durante a depuração do .NET:

  • Depurar>Intervir (ou F11) em etapas de código que não é de usuário sobre o código para a próxima linha de código do usuário.
  • Depurar>Circular (ou Shift+F11) no código que não é de usuário é executado para a próxima linha de código do usuário.

Se não houver mais código de usuário, a depuração continuará até terminar, atingirá outro ponto de interrupção ou gerará um erro.

Se o depurador intervir no código que não é de usuário (por exemplo, você usa Depurar>Interromper Tudo e pausar no código que não é de usuário), a janela Sem Origem será exibida. Em seguida, você pode usar um comando Depurar>Etapa para ir para a próxima linha de código do usuário.

Se ocorrer uma exceção sem tratamento no código não usuário, o depurador será interrompido na linha de código do usuário em que a exceção foi gerada.

Se as exceções de primeira opção estiverem habilitadas para a exceção, a linha do código do usuário que chama será realçada em verde no código-fonte. A janela Pilha de Chamadas exibe o quadro anotado rotulado [Código Externo].

C++ Apenas Meu Código

A partir do Visual Studio 2017 versão 15.8, também há suporte para Apenas Meu Código para depuração passo a passo de código. Esse recurso também requer o uso da opção do compilador /JMC (depuração Apenas Meu Código). A opção é habilitada por padrão em projetos C++. Para a janela Pilha de Chamadas e o suporte à pilha de chamadas em Apenas Meu Código, a opção /JMC não é necessária.

Para ser classificado como código de usuário, o PDB para o binário que contém o código do usuário deve ser carregado pelo depurador (use a janela Módulos para verificar o status de carregamento).

Para o comportamento da pilha de chamadas, como na janela Pilha de Chamadas, Apenas Meu Código em C++ considera apenas essas funções como código que não é de usuário:

  • Funções com informações de origem removidas no arquivo de símbolos.
  • Funções nas quais os arquivos de símbolos indicam que não há nenhum arquivo de origem que corresponde ao quadro de pilhas.
  • Funções especificadas em arquivos *.natjmc na pasta %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.

Para comportamento da depuração passo a passo de código, Apenas Meu Código em C++ considera apenas essas funções como código que não é de usuário:

  • Funções para as quais o arquivo PDB correspondente não foi carregado no depurador.
  • Funções especificadas em arquivos *.natjmc na pasta %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.

Nota

Para suporte à depuração de código em Just My Code, o código C++ deve ser compilado usando os compiladores MSVC no Visual Studio 15.8 Versão Prévia 3 ou posterior, e a opção do compilador /JMC deve estar habilitada (ela está habilitada por padrão). Para obter detalhes adicionais, confira Personalizar o comportamento de depuração passo a passo de código e pilha de chamadas em C++ e esta postagem no blog. Para o código compilado usando um compilador mais antigo, os arquivos .natstepfilter são a única maneira de personalizar a depuração passo a passo de código, que é independente de Apenas Meu Código. Confira Personalizar o comportamento da depuração passo a passo de C++.

Durante a depuração do C++, o código não usuário é ignorado por padrão. Durante a depuração do C++:

  • Depurar>Intervir (ou F11) em etapas de código não usuário sobre o código ou executadas para a próxima linha de código do usuário, se Intervir for chamado do código não usuário.
  • Depurar>Sair (ou Deslocar+F11) em execuções de código não usuário para a próxima linha de código do usuário (fora do quadro de pilha atual).

Se não houver mais código de usuário, a depuração continuará até terminar, atingirá outro ponto de interrupção ou gerará um erro.

Se o depurador intervir em um código que não é de usuário (por exemplo, usar Depurar>Interromper Tudo e pausar em um código que não é de usuário), a depuração passo a passo continuará no código que não é de usuário.

Se o depurador atingir uma exceção, ele será interrompido na exceção, seja no código do usuário ou que não é do usuário. As opções Sem tratamento do usuário na caixa de diálogo Configurações de Exceção são ignoradas.

Personalizar a pilha de chamadas de C++ e o comportamento da depuração passo a passo de código

Para projetos C++, você pode especificar os módulos, arquivos de origem e funções que a janela Pilha de Chamadas trata como código não usuário especificando-os em arquivos de *.natjmc. Essa personalização também se aplica à depuração passo a passo de código se você estiver usando o compilador mais recente (confira Apenas Meu Código em C++).

  • Para especificar o código não usuário para todos os usuários do computador do Visual Studio, adicione o arquivo .natjmc à pasta %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
  • Para especificar o código não usuário para um usuário individual, adicione o arquivo .natjmc à pasta %USERPROFILE%\My Documents\<versão do Visual Studio>\Visualizadores.

Um arquivo .natjmc é um arquivo XML com esta sintaxe:

<?xml version="1.0" encoding="utf-8"?>
<NonUserCode xmlns="http://schemas.microsoft.com/vstudio/debugger/jmc/2015">

  <!-- Modules -->
  <Module Name="ModuleSpec" />
  <Module Name="ModuleSpec" Company="CompanyName" />

  <!-- Files -->
  <File Name="FileSpec"/>

  <!-- Functions -->
  <Function Name="FunctionSpec" />
  <Function Name="FunctionSpec" Module ="ModuleSpec" />
  <Function Name="FunctionSpec" Module ="ModuleSpec" ExceptionImplementation="true" />

</NonUserCode>

atributos de elemento do módulo

Atributo Descrição
Name Necessário. O caminho completo do módulo ou dos módulos. Você pode usar os caracteres curinga do Windows ? (zero ou um caractere) e * (zero ou mais caracteres). Por exemplo

<Module Name="?:\3rdParty\UtilLibs\*" />

informa o depurador para tratar todos os módulos em \3rdParty\UtilLibs em qualquer unidade como código externo.
Company Opcional. O nome da empresa que publica o módulo inserido no arquivo executável. Você pode usar esse atributo para desambiguar os módulos.

Atributos do elemento de arquivo

Atributo Descrição
Name Obrigatório. O caminho completo do arquivo de origem ou arquivos a serem tratados como código externo. Você pode usar os caracteres curinga do Windows ? e * ao especificar o caminho.

Atributos do elemento de função

Atributo Descrição
Name Obrigatório O nome totalmente qualificado da função a ser tratada como código externo. Você pode usar os caracteres curinga do Windows ? e * ao especificar o caminho.
Module Opcional. O nome ou o caminho completo para o módulo que contém a função. Você pode usar esse atributo para desambiguar funções com o mesmo nome.
ExceptionImplementation Quando definido como true, a pilha de chamadas exibe a função que lançou a exceção em vez dessa função.

Personalizar o comportamento de pular entre etapas do C++ independentemente das configurações de Just My Code

Em projetos C++, você pode especificar funções para serem ignoradas listando-as como funções NoStepInto em arquivos *.natstepfilter. As funções listadas em arquivos *.natstepfilter não dependem das configurações de Just My Code. Uma função NoStepInto informa ao depurador para percorrer a função, mesmo que ela chame algumas funções StepInto ou outro código de usuário. Ao contrário das funções listadas em .natjmc, o depurador entrará na primeira linha de código de usuário dentro da função NoStepInto.

  • Para especificar o código não usuário para todos os usuários locais do Visual Studio, adicione o arquivo .natstepfilter à pasta %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
  • Para especificar o código não usuário para um usuário individual, adicione o arquivo .natstepfilter à pasta %USERPROFILE%\My Documents\<versão do Visual Studio>\Visualizadores.

Nota

Algumas extensões de terceiros podem desabilitar a funcionalidade .natstepfilter.

Um arquivo .natstepfilter é um arquivo XML com esta sintaxe:

<?xml version="1.0" encoding="utf-8"?>
<StepFilter xmlns="http://schemas.microsoft.com/vstudio/debugger/natstepfilter/2010">
    <Function>
        <Name>FunctionSpec</Name>
        <Action>StepAction</Action>
    </Function>
    <Function>
        <Name>FunctionSpec</Name>
        <Module>ModuleSpec</Module>
        <Action>StepAction</Action>
    </Function>
</StepFilter>

Elemento Descrição
Function Obrigatório. Especifica uma ou mais funções como funções que não são de usuário.
Name Necessário. Uma expressão regular formatada como ECMA-262 que especifica o nome completo da função a ser correspondida. Por exemplo:

<Name>MyNS::MyClass::.*</Name>

informa ao depurador que todos os métodos em MyNS::MyClass devem ser considerados código não usuário. A correspondência diferencia maiúsculas e minúsculas.
Module Opcional. Uma expressão regular formatada ECMA-262 especificando o caminho completo para o módulo que contém a função. A correspondência não diferencia maiúsculas de minúsculas.
Action Obrigatório. Um destes valores que diferenciam maiúsculas e minúsculas:

NoStepInto – instrui o depurador a depurar parcialmente a função.
StepInto – instrui o depurador a intervir na função, substituindo qualquer outro NoStepInto pela função correspondente.

Informações adicionais sobre os arquivos .natstepfilter e .natjmc.

  • A partir do Visual Studio 2022 versão 17.6, você pode adicionar arquivos .natjmc e .natstepfilter diretamente à solução ou ao projeto.

  • Erros de sintaxe nos arquivos .natstepfilter e .natjmc não são relatados na janela de Saída do depurador.

  • Ao contrário dos arquivos .natvis, os arquivos .natstepfilter e .natjmc não são recarregados. Em vez disso, esses arquivos são recarregados perto do início da sessão de depuração.

  • Para funções de modelo, o uso de &lt;.*&gt; ou &lt;.* no nome pode ser útil.

JavaScript Apenas Meu Código

Para os projetos .esproj no Visual Studio 2022, o Visual Studio Code usa um arquivo launch.json para configurar e personalizar o depurador. launch.json é um arquivo de configuração do depurador.

O Visual Studio anexa o depurador somente ao código do usuário. Para os projetos .esproj, você pode configurar o código do usuário (ou seja, as configurações de Just My Code) no Visual Studio usando a configuração skipFiles em launch.json. Essa configuração funciona da mesma forma que as configurações de launch.json no VS Code. Para mais informações sobre skipFiles, confira Ignorar Código Desinteressante.