Partilhar 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 ignora automaticamente chamadas para o sistema, framework, e outro código não pertencente ao usuário. Na janela pilha de chamadas, Just My Code condensa estas chamadas em quadros de [Código Externo].

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

Ativar ou desativar Just My Code

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

  • Para habilitar ou desabilitar 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 Ativar apenas meu código na caixa de diálogo Opções.

Captura de tela de Ativar apenas meu código na caixa de diálogo Opções.

Observação

Enable Just My Code é uma configuração global que se aplica a todos os projetos do Visual Studio em todos os idiomas.

Apenas a depuração do 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ímbolos. Para obter mais informações, consulte Familiarize-se com a forma como o depurador se conecta 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 Call Stack ou Tasks, Just My Code recolhe o código não pertencente ao utilizador numa moldura de código cinzento anotada rotulada [External Code].

Captura de tela do código externo na janela Pilha de chamadas.

Captura de ecrã do código externo na janela de Pilha de Chamadas.

Dica

Para abrir os módulos , a pilha de chamadas , as tarefas ou a maioria das outras janelas de depuração, deve-se 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 de recolhido [Código Externo], clique com o botão direito do mouse na de Pilha de Chamadas ou na janela de Tarefas e selecione Mostrar de Código Externo no menu de contexto. As linhas de código externo expandidas substituem o quadro [External Code].

Captura de tela de Mostrar código externo na janela Pilha de chamadas.

Captura de ecrã de Mostrar código externo na janela da Pilha de chamadas.

Observação

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

Clicar duas vezes em uma linha de código externo expandida na janela da Pilha de Chamadas realça a linha de código chamador em verde no código-fonte. Para DLLs ou outros módulos não encontrados ou carregados, pode abrir-se uma página indicando que um símbolo ou a origem não foram encontrados.

A partir do Visual Studio 2022 versão 17.7, é possível autodescompilar o código .NET clicando duas vezes em código externo na janela Call Stack. Para obter mais informações, consulte Gerar código-fonte de assemblies .NET ao depurar.

.NET Apenas Meu Código

Em projetos .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 binários otimizados e arquivos de .pdb .pdb não carregado s como código não-usuário.

Três atributos do compilador também afetam o que o depurador .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 no .NET:

  • Depurar>Step Into (ou F11) em etapas de código de não-usuário sobre o código para a próxima linha de código de usuário.
  • Debug>Step Out (ou Shift+F11) em código que não seja de usuário avança para a próxima linha de código de 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 lançar um erro.

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

Se ocorrer uma exceção não tratada em código que não seja de usuário, o depurador quebrará na linha de código do usuário onde a exceção foi gerada.

Se as exceções de primeira chance estiverem ativadas para a exceção, a linha de código de utilizador que fez a chamada fica realçada em verde no código-fonte. A janela Call Stack exibe o quadro anotado rotulado [Código externo].

C++ Apenas Meu Código

A partir do Visual Studio 2017 versão 15.8, Just My Code para revisão de código também é suportado. Esse recurso também requer o uso do /JMC (Just my code debugging) switch de compilador. O switch é habilitado por padrão em projetos C++. Para janela de de pilha de chamadas e suporte de pilha de chamadas em Just My Code, 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 de 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 Call Stack, Just My Code em C++ considera apenas essas funções como código não pertencente ao utilizador:

  • Funções com informações de origem removidas no seu ficheiro de símbolos.
  • Funções em que os ficheiros de símbolos indicam que não há nenhum ficheiro de origem correspondente ao frame da pilha.
  • As funções especificadas em arquivos de *.natjmc na pasta %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.

Para o comportamento de execução passo a passo de código, Just My Code em C++ considera apenas essas funções como código não pertencente ao utilizador:

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

Observação

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

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

  • Depurar>Step Into (ou F11) quando em código de não-usuário passa por cima do código ou avança para a próxima linha de código de usuário, se Step Into for chamado a partir de código de não-usuário.
  • Debug>Step out (ou Shift+F11) em código que não é de usuário é executado para a próxima linha de código de 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 lançar um erro.

Se o depurador interromper no código de não-utilizador (por exemplo, se utilizar Depurar>Interromper Todos e fizer pausa no código de não-utilizador), a depuração continuará no código de não-utilizador.

Se o depurador atingir uma exceção, ele para na exceção, seja no código de usuário ou não-usuário. Opções de não tratadas pelo usuário na caixa de diálogo Configurações de exceção são ignoradas.

Personalizar a pilha de chamadas C++ e o comportamento de navegação pelo código

Para projetos C++, você pode especificar os módulos, arquivos de origem e funções que a janela Call Stack trata como código não-usuário, especificando-os em arquivos de *.natjmc. Esta personalização também se aplica ao passo a passo no código se estiver a usar o compilador mais recente (consulte C++ Just My Code).

  • Para especificar código não gerado pelo utilizador para todos os utilizadores do computador que executa o Visual Studio, adicione o ficheiro .natjmc à pasta %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
  • Para especificar o código de não-usuário para um utilizador individual, adicione o arquivo .natjmc à pasta %USERPROFILE%\My Documents\ versão do Visual Studio<>\Visualizers.

Um arquivo de .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 do elemento 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\*" />

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

Atributos do elemento File

Atributo Descrição
Name Necessá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 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 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 de exibir esta função.

Personalizar o comportamento de depuração do C++ independentemente das configurações do Just My Code

Em projetos C++, você pode especificar funções a serem substituídas listando-as como funções NoStepInto em arquivos de *.natstepfilter. As funções listadas nos arquivos *.natstepfilter não dependem das configurações de Just My Code. Uma função NoStepInto instrui o depurador a saltar sobre a função, mesmo que esta chame algumas funções StepInto ou outro código de utilizador. Ao contrário das funções listadas em .natjmc, o depurador avançará para a primeira linha de código do 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 de .natstepfilter à pasta %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
  • Para especificar código não utilizado pelo usuário para um usuário individual, adicione o arquivo .natstepfilter à pasta %USERPROFILE%\My Documents\<versão do Visual Studio>\Visualizers.

Observação

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

Um arquivo de .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 Obrigatório. Uma expressão regular formatada ECMA-262 especificando o nome completo da função para corresponder. 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 de 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 Necessário. Um destes valores sensíveis a maiúsculas e minúsculas:

NoStepInto - diz ao depurador para passar por cima da função.
StepInto - diz ao depurador para entrar na função, substituindo qualquer outro NoStepInto para a função correspondente.

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

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

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

  • Ao contrário arquivos .natvis, .natstepfilter e arquivos .natjmc não são recarregados a quente. 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 projetos de .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 projetos de .esproj, você pode configurar o código do usuário (ou seja, apenas meu código configurações) no Visual Studio usando a configuração skipFiles no launch.json. Essa configuração funciona da mesma forma que as configurações de launch.json no VS Code. Para obter mais informações sobre skipFiles, consulte Ignorar código irrelevante.