Inspecionar estados anteriores do aplicativo usando o retrocesso do IntelliTrace no Visual Studio (Visual Studio Enterprise)
O retrocesso do IntelliTrace tira automaticamente um instantâneo do seu aplicativo em cada evento de etapa do depurador e do ponto de interrupção. Os instantâneos registrados permitem retornar aos pontos de interrupção ou às etapas anteriores e exibir o estado do aplicativo como ele era no passado. O retrocesso do IntelliTrace poderá poupar seu tempo quando você desejar ver o estado do aplicativo anterior, mas não desejar reiniciar a depuração nem recriar o estado do aplicativo desejado.
O step-back do IntelliTrace está disponível pelo Visual Studio Enterprise 2017 versão 15.5 e posterior, e requer a Atualização de Aniversário do Windows 11 ou Windows 10, ou anterior. Atualmente, o recurso é compatível com depuração de ASP.NET, WinForms, WPF, aplicativos de console gerenciados e bibliotecas de classes gerenciadas. Começando com o Visual Studio 2017 Enterprise versão 15.7, o recurso também dá suporte ao ASP.NET Core e ao .NET Core. Começando com o Visual Studio 2017 Enterprise versão 15.9 Versão prévia 2, o recurso também dá suporte aos aplicativos nativos destinados ao Windows. Atualmente, não há suporte para os depuração de aplicativos UWP.
Neste tutorial, você irá:
- Habilitar instantâneos e eventos do IntelliTrace
- Navegar pelos eventos usando os comandos de retrocesso e de avanço
- Exibir instantâneos de evento
Habilitar o modo de eventos e instantâneos do IntelliTrace
Abra seu projeto no Visual Studio Enterprise.
Abra as configurações Ferramentas>Opções>IntelliTrace e selecione a opção Eventos e instantâneos do IntelliTrace.
Começando no Visual Studio 2017 Enterprise versão 15.9 Versão prévia 2, essa opção passou a ser Instantâneos do IntelliTrace (gerenciados e nativos).
Se você deseja configurar as opções para exibição de instantâneos em exceções, escolha IntelliTrace>Avançado na caixa de diálogo Opções.
Essas opções estão disponíveis no Visual Studio 2017 Enterprise versão 15.7 em diante.
Quando você habilita eventos e instantâneos, tirar instantâneos em exceções também é habilitado por padrão. Você pode desabilitar os instantâneos em exceções, desmarcando Coletar instantâneos em eventos de exceção. Quando esse recurso está habilitado, os instantâneos são obtidos nas exceções sem tratamento. Para exceções tratadas, os instantâneos serão tirados somente se a exceção for gerada e se não for um crescimento de uma exceção lançada anteriormente. Você pode definir um número máximo de instantâneos em exceções selecionando um valor na lista suspensa. O máximo se aplica a cada vez que o aplicativo entra em modo de interrupção (por exemplo, quando o aplicativo atinge um ponto de interrupção).
Observação
Os instantâneos são obtidos somente para eventos de exceção que o IntelliTrace registra. No código gerenciado, você pode especificar quais eventos o IntelliTrace registra, selecionando Ferramentas>Opções>Eventos do IntelliTrace.
Em seu projeto, defina um ou mais pontos de interrupção e inicie a depuração (pressione F5) ou inicie a depuração percorrendo seu código (F10 ou F11).
O IntelliTrace obtém um instantâneo do processo do aplicativo em cada etapa do depurador, em cada evento de ponto de interrupção e em cada evento de exceção sem tratamento. Esses eventos são registrados na guia Eventos na janela Ferramentas de Diagnóstico junto com outros eventos do IntelliTrace. Para abrir essa janela, escolha Depurar>Janelas>Mostrar Ferramentas de Diagnóstico.
Um ícone de câmera aparece próximo aos eventos para os quais os instantâneos estão disponíveis.
Por motivos de desempenho, os instantâneos não são feitos quando você pisa rapidamente. Se nenhum ícone de câmera aparecer próximo da etapa, tente depurar mais lentamente.
Navegar e exibir instantâneos
Navegue entre os eventos usando os botões Voltar Etapa (Alt + [) e Avançar Etapa (Alt +]) na barra de ferramentas Depurar.
Esses botões navegam pelos eventos exibidos na guia Eventos na janela Ferramentas de Diagnóstico. Voltar ou avançar para um evento ativa automaticamente a depuração histórica no evento selecionado.
Quando você volta ou avança uma etapa, o Visual Studio entra em modo de depuração histórica. Nesse modo, o contexto do depurador alterna para a hora em que o evento selecionado foi registrado. O Visual Studio também move o ponteiro para a linha de código correspondente na janela de origem.
Nessa exibição, você pode inspecionar os valores nas janelas Pilha de Chamadas, Locais, Autos e Inspeção. Você também pode passar o mouse sobre variáveis para exibir DataTips e executar a avaliação da expressão na janela Imediato. Os dados que você vê são do instantâneo do processo do aplicativo executado naquele momento.
Portanto, por exemplo, se você alcançou um ponto de interrupção e realizou uma Etapa (F10), o botão Voltar Etapa coloca o Visual Studio no modo histórico na linha de código correspondente ao ponto de interrupção.
Para retornar à execução dinâmica, escolha Continuar (F5) ou selecione o link Retornar à Depuração Dinâmica na barra de informações.
Você também pode exibir um instantâneo na guia Eventos. Selecione um evento com um instantâneo e selecione Ativar de Depuração Histórica.
Ao contrário do comando Definir Próxima Instrução, a exibição de um instantâneo não executa novamente seu código; ela fornece uma exibição estática do estado do aplicativo em um ponto no tempo ocorrido no passado.
Para saber mais sobre como inspecionar variáveis no Visual Studio, confira Primeiro acesso ao depurador
Perguntas frequentes
Qual a diferença entre o retrocesso do IntelliTrace e o modo somente eventos do IntelliTrace?
O IntelliTrace no modo somente eventos permite que você ative a depuração histórica em pontos de interrupção e etapas do depurador. No entanto, o IntelliTrace somente capturará dados nas janelas Locais e Autos se elas estiverem abertas e somente capturará dados que estejam expandidos e na exibição. No modo somente eventos, muitas vezes você não tem uma exibição completa das variáveis e objetos complexos. Além disso, a avaliação de expressões e a visualização de dados na janela Inspecionar não possuem suporte.
No modo de eventos e instantâneos, o IntelliTrace captura todo o instantâneo do processo do aplicativo, incluindo objetos complexos. Em uma linha de código, você pode ver as mesmas informações como se tivesse sido parado em um ponto de interrupção (e não importa se você expandiu as informações anteriormente). A avaliação da expressão também é compatível ao exibir um instantâneo.
Qual é o impacto de desempenho desse recurso?
O impacto no desempenho geral das etapas depende de seu aplicativo. A sobrecarga de tirar um instantâneo é de cerca de 30 ms. Quando um instantâneo é obtido, o processo do aplicativo é bifurcado e a cópia bifurcada é suspensa. Quando você exibe um instantâneo, o Visual Studio está anexando a cópia bifurcada do processo. Para cada instantâneo, o Visual Studio copia apenas a tabela de página e define as páginas como gravação de cópia. Se os objetos no heap forem alterados entre as etapas do depurador associadas a instantâneos, a respectiva tabela de página será copiada, resultando em um custo mínimo de memória. Se o Visual Studio detectar que não há memória suficiente para tirar um instantâneo, ele não precisa de um.
Problemas conhecidos
Se você estiver usando o modo de eventos e instantâneos do IntelliTrace nas versões do Windows mais antigas do que o Windows 10 Fall Creators Update (RS3) e se o destino da plataforma de depuração do aplicativo estiver definido como x86, o IntelliTrace não tirará instantâneos.
Soluções alternativas:
- Se você estiver na Atualização de Aniversário do Windows 10 (RS1) e sua versão for anterior à 10.0.14393.2273, instalar o KB4103720.
- Se você estiver no Windows 10 Creators Update (RS2) e sua versão for anterior à 10.0.15063.1112, instalar o KB4103722.
- Instale ou atualize para o Windows 11 ou Windows 10 Fall Creators Update (RS3).
- Como alternativa:
Instale o conjunto de ferramentas do VC++ 2015.3 v140 para o componente de área de trabalho (x86, x64) do Instalador do Visual Studio.
Compile o aplicativo de destino.
Na linha de comando, use a ferramenta
editbin
para definir o sinalizadorLargeaddressaware
no executável de destino. Por exemplo, você pode usar esse comando (depois de atualizar o caminho): "C:\Arquivos de Programas (x86)\Microsoft Visual Studio\Preview\Enterprise\VC\Tools\MSVC\14.12.25718\bin\Hostx86\x86\editbin.exe" /Largeaddressaware "C:\Path\To\Application\app.exe".Para iniciar a depuração, pressione F5. Agora, os instantâneos são obtidos em pontos de interrupção e etapas do depurador.
Observação
O sinalizador
Largeaddressaware
deverá ser definido sempre que o executável for recompilado com as alterações.
Quando um instantâneo do processo do aplicativo for criado em um aplicativo que usa um arquivo persistente mapeado na memória, o processo com o instantâneo manterá um bloqueio exclusivo no arquivo mapeado em memória (mesmo depois que o processo pai liberar o bloqueio). Outros processos ainda serão capazes de ler, mas não de gravar no arquivo mapeado em memória.
Solução alternativa:
- Elimine todos os instantâneos encerrando a sessão de depuração.
Ao depurar um aplicativo cujo processo tem um alto número de regiões de memória exclusivas, como um aplicativo que carrega um grande número de DLLs, o desempenho de etapas com instantâneos habilitados pode ser afetado. Esse problema será abordado em uma versão futura do Windows. Se você estiver enfrentando esse problema, entre em contato conosco em stepback@microsoft.com.
Ao salvar um arquivo com Depurar > IntelliTrace > Salvar a sessão do IntelliTrace no modo de eventos e instantâneos, os outros dados capturados de instantâneos não estão disponíveis no arquivo .itrace. No modo de eventos de ponto de interrupção e etapa, você vê as mesmas informações como se tivesse salvo o arquivo no modo somente eventos do IntelliTrace.
Próximas etapas
Neste tutorial, você aprendeu como usar o retrocesso do IntelliTrace. Talvez você queira saber mais sobre outros recursos do IntelliTrace.