Inspecionar estados anteriores do aplicativo usando o retrocesso do IntelliTrace no Visual Studio (Visual Studio Enterprise)Inspect previous app states using IntelliTrace step-back in 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.IntelliTrace step-back automatically takes a snapshot of your application at every breakpoint and debugger step event. 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.The recorded snapshots enable you to go back to previous breakpoints or steps and view the state of the application as it was in the past. 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.IntelliTrace step-back can save you time when you want to see the previous application state but don't want to restart debugging or recreate the desired app state.

O retrocesso do IntelliTrace passar a estar disponível do Visual Studio Enterprise 2017 versão 15.5 e posterior e ele requer a Atualização de Aniversário do Windows 10 ou superior.IntelliTrace step-back is available starting in Visual Studio Enterprise 2017 version 15.5 and higher, and it requires Windows 10 Anniversary Update or above. Atualmente, o recurso é compatível com depuração de ASP.NET, WinForms, WPF, aplicativos de console gerenciados e bibliotecas de classes gerenciadas.The feature is currently supported for debugging ASP.NET, WinForms, WPF, managed console apps, and managed class libraries. 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.Starting with Visual Studio 2017 Enterprise version 15.7, the feature is also supported for ASP.NET Core and .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.Starting with Visual Studio 2017 Enterprise version 15.9 Preview 2, the feature is also supported for native apps targeting Windows. Atualmente, não há suporte para a depuração de aplicativos UWP.Debugging UWP applications is not currently supported.

Neste tutorial, você irá:In this tutorial, you will:

  • Habilitar instantâneos e eventos do IntelliTraceEnable IntelliTrace events and snapshots
  • Navegar pelos eventos usando os comandos de retrocesso e de avançoNavigate events using step-back and step-forward commands
  • Exibir instantâneos de eventoView event snapshots

Habilitar o modo de eventos e instantâneos do IntelliTraceEnable IntelliTrace events and snapshots mode

  1. Abra seu projeto no Visual Studio Enterprise.Open your project in Visual Studio Enterprise.

  2. Abra ferramentas > Opções > configurações do IntelliTrace e selecione a opção eventos e instantâneos do IntelliTrace.Open Tools > Options > IntelliTrace settings, and select the option IntelliTrace events and snapshots.

    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).Starting in Visual Studio 2017 Enterprise version 15.9 Preview 2, this option is IntelliTrace snapshots (managed and native).

    Habilitar o modo de instantâneos e eventos do IntelliTraceEnable IntelliTrace Events and Snapshots mode

  3. Se você quiser configurar opções para exibir instantâneos em exceções, escolha IntelliTrace > avançado na caixa de diálogo Opções .If you want to configure options for viewing snapshots on exceptions, choose IntelliTrace > Advanced from the Options dialog box.

    Essas opções estão disponíveis no Visual Studio 2017 Enterprise versão 15.7 em diante.These options are available starting in Visual Studio 2017 Enterprise version 15.7.

    Configurar o comportamento de instantâneos em exceções

    Quando você habilita eventos e instantâneos, tirar instantâneos em exceções também é habilitado por padrão.When you enable events and snapshots, taking snapshots on exceptions is also enabled by default. Você pode desabilitar os instantâneos em exceções, desmarcando Coletar instantâneos em eventos de exceção.You can disable snapshots on exceptions by deselecting Collect snapshots on exception events. Quando esse recurso está habilitado, os instantâneos são obtidos nas exceções sem tratamento.When this feature is enabled, snapshots are taken for unhandled exceptions. Para exceções tratadas, os instantâneos serão obtidos somente se a exceção for lançada e se não for um relançamento de uma exceção gerada anteriormente.For handled exceptions, snapshots are taken only if the exception is thrown and if it is not a re-throw of an previously-thrown exception. Você pode definir um número máximo de instantâneos em exceções selecionando um valor na lista suspensa.You can set a maximum number of snapshots on exceptions by selecting a value from the drop-down list. 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).The maximum applies for each time that your app enters break mode (such as when your app hits a breakpoint).

    Observação

    Os instantâneos são obtidos somente para eventos de exceção que o IntelliTrace registra.Snapshots are taken only for exception events that IntelliTrace records. Para código gerenciado, você pode especificar quais eventos os registros do IntelliTrace selecionando ferramentas > Opções > eventos do IntelliTrace.For managed code, you can specify what events IntelliTrace records by selecting Tools > Options > IntelliTrace Events.

  4. 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).In your project, set one or more breakpoints and start debugging (press F5), or start debugging by stepping through your code (F10 or 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.IntelliTrace takes a snapshot of the application's process on each debugger step, breakpoint event, and unhandled exception event. Esses eventos são registrados na guia Eventos na janela Ferramentas de Diagnóstico junto com outros eventos do IntelliTrace.These events are recorded in the Events tab in the Diagnostic Tools window, along with other IntelliTrace events. Para abrir essa janela, escolha depurar > janelas > Mostrar ferramentas de diagnóstico.To open this window, choose Debug > Windows > Show Diagnostic Tools.

    Um ícone de câmera aparece próximo aos eventos para os quais os instantâneos estão disponíveis.A camera icon appears next to the events for which snapshots are available.

    Guia de eventos com instantâneosEvents tab with snapshots

    Por questões de desempenho, os instantâneos não são executados quando você percorre as etapas muito rapidamente.For performance reasons, snapshots are not taken when you step very quickly. Se nenhum ícone de câmera aparecer próximo da etapa, tente depurar mais lentamente.If no camera icon appears next to the step, try stepping more slowly.

  1. Navegue entre os eventos usando os botões Voltar Etapa (Alt + [) e Avançar Etapa (Alt +]) na barra de ferramentas Depurar.Navigate between events by using the Step Backward (Alt + [) and Step Forward (Alt + ]) buttons in the Debug toolbar.

    Esses botões navegam pelos eventos que aparecem na guia eventos na janela ferramentas de diagnóstico.These buttons navigate the events that appear in the Events tab in the Diagnostic Tools window. Avançar ou retroceder para um evento ativa automaticamente a depuração histórica no evento selecionado.Stepping backward or forward to an event automatically activates historical debugging on the selected event.

    Botões voltar e avançar da etapaStep Backward and Forward buttons

    Quando você volta ou avança uma etapa, o Visual Studio entra em modo de depuração histórica.When you step back or step forward, Visual Studio enters historical debugging mode. Nesse modo, o contexto do depurador alterna para a hora em que o evento selecionado foi registrado.In this mode, the debugger's context switches to the time when the selected event was recorded. O Visual Studio também move o ponteiro para a linha de código correspondente na janela de origem.Visual Studio also moves the pointer to the corresponding line of code in the source window.

    Nessa exibição, você pode inspecionar os valores nas janelas Pilha de Chamadas, Locais, Autos e Inspeção.From this view, you can inspect the values in the Call Stack, Locals, Autos, and Watch windows. Você também pode passar o mouse sobre variáveis para exibir DataTips e executar a avaliação da expressão na janela Imediato.You can also hover over variables to view DataTips and perform expression evaluation in the Immediate window. Os dados que você vê são do instantâneo do processo do aplicativo executado naquele momento.The data you see is from the snapshot of the application's process taken at that point in time.

    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.So, for example, if you've hit a breakpoint and taken a Step (F10), the Step Backward button puts Visual Studio in historical mode at the line of code corresponding to the breakpoint.

    Ativando o modo histórico em um evento com um instantâneoActivating historical mode on an event with a snapshot

  2. Para retornar à execução ao vivo, escolha Continuar (F5) ou clique no link Retornar à depuração ao vivo na barra de informações.To return to live execution, choose Continue (F5) or click the Return to Live Debugging link in the infobar.

  3. Você também pode exibir um instantâneo na guia eventos . Para fazer isso, selecione um evento com um instantâneo e clique em Ativar depuração histórica.You can also view a snapshot from the Events tab. To do this, select an event with a snapshot and click Activate Historical Debugging.

    Ativar a depuração histórica em um eventoActivate Historical Debugging on an event

    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.Unlike the Set Next Statement command, viewing a snapshot doesn’t rerun your code; it gives you a static view of the state of the application at a point in time that has occurred in the past.

    Visão geral de retorno de fundo do IntelliTraceOverview of IntelliTrace step-back

    Para saber mais sobre como inspecionar variáveis no Visual Studio, confira Primeiro acesso ao depuradorTo learn more about how to inspect variables in Visual Studio, see First look at the debugger

Perguntas frequentesFrequently Asked Questions

Qual a diferença entre o retrocesso do IntelliTrace e o modo somente eventos do IntelliTrace?How is IntelliTrace step-back different from IntelliTrace events only mode?

O IntelliTrace no modo somente eventos permite que você ative a depuração histórica em pontos de interrupção e etapas do depurador.IntelliTrace in events only mode does allow you to activate historical debugging on debugger steps and breakpoints. 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.However, IntelliTrace only captures data in the Locals and Autos windows if the windows are open, and it only captures data that is expanded and in view. No modo somente eventos, você geralmente não tem uma exibição completa das variáveis e de objetos complexos.In events only mode, you often do not have a complete view of the variables and complex objects. Além disso, não há suporte para a avaliação de expressão e para a exibição de dados na janela Inspeção.Additionally, expression evaluation and viewing data in the Watch window is not supported.

No modo de eventos e instantâneos, o IntelliTrace captura todo o instantâneo do processo do aplicativo, incluindo objetos complexos.In events and snapshots mode, IntelliTrace captures the entire snapshot of the application's process, including complex objects. Em uma linha de código, você pode ver as mesmas informações como se você tivesse parado em um ponto de interrupção (e não importa se você expandiu previamente as informações).At a line of code, you can see the same information as if you were stopped at a breakpoint (and it does not matter whether you previously expanded the information). A avaliação da expressão também é compatível ao exibir um instantâneo.Expression evaluation is also supported when viewing a snapshot.

Qual é o impacto de desempenho desse recurso?What is the performance impact of this feature?

O impacto no desempenho geral das etapas depende de seu aplicativo.The impact on overall stepping performance depends on your application. A sobrecarga de tirar um instantâneo é de cerca de 30 ms.The overhead of taking a snapshot is around 30 ms. Quando um instantâneo é obtido, o processo do aplicativo é bifurcado e a cópia bifurcada é suspensa.When a snapshot is taken, the app’s process is forked and the forked copy is suspended. Quando você exibe um instantâneo, o Visual Studio está anexando a cópia bifurcada do processo.When you view a snapshot, Visual Studio is attaching to the forked copy of the process. 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.For each snapshot, Visual Studio copies only the page table and sets pages to copy-on-write. 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.If objects on the heap change between debugger steps with associated snapshots, the respective page table is then copied, resulting in minimal memory cost. Se o Visual Studio detectar que não há memória suficiente para criar um instantâneo, ele não o fará.If Visual Studio detects that there is not enough memory to take a snapshot, it does not take one.

Problemas conhecidosKnown Issues

  • Se você estiver usando o modo de eventos e instantâneos do IntelliTrace em versões do Windows anteriores ao Windows 10 Fall Creators Update (RS3) e se a plataforma de depuração de destino do aplicativo for definida como x86, o IntelliTrace não obterá instantâneos.If you are using IntelliTrace events and snapshots mode on versions of Windows older than Windows 10 Fall Creators Update (RS3), and if the debug platform target of the application is set to x86, IntelliTrace does not take snapshots.

    Soluções alternativas:Workarounds:

    • Se você estiver na Atualização de Aniversário do Windows 10 (RS1) e anterior à versão 10.0.14393.2273, instale o KB4103720.If you are on the Windows 10 Anniversary Update (RS1) and below version 10.0.14393.2273, install KB4103720.
    • Se você estiver com o Windows 10 Creators Update (RS2) e anterior à versão 10.0.15063.1112, instale o KB4103722.If you are on the Windows 10 Creators Update (RS2) and below version 10.0.15063.1112, install KB4103722.
    • Instale ou atualize para o Windows 10 Fall Creators Update (RS3).Install or upgrade to Windows 10 Fall Creators Update (RS3).
    • Como alternativa:Alternatively:
      1. Instale o conjunto de ferramentas do VC++ 2015.3 v140 para o componente de área de trabalho (x86, x64) do Instalador do Visual Studio.Install the VC++ 2015.3 v140 toolset for desktop (x86, x64) component from the Visual Studio installer.

      2. Compile o aplicativo de destino.Build the target application.

      3. Na linha de comando, use a ferramenta editbin para definir o sinalizador Largeaddressaware para o executável de destino.From the command line, use the editbin tool to set the Largeaddressaware flag for the target executable. 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".For example, you might use this command (after updating the path): "C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\VC\Tools\MSVC\14.12.25718\bin\Hostx86\x86\editbin.exe" /Largeaddressaware "C:\Path\To\Application\app.exe".

      4. Para iniciar a depuração, pressione F5.To start debugging, press F5. Agora, os instantâneos são obtidos em pontos de interrupção e etapas do depurador.Now, snapshots are taken on debugger steps and breakpoints.

        Observação

        O sinalizador Largeaddressaware deverá ser definido sempre que o executável for recompilado com as alterações.The Largeaddressaware flag must be set each time that the executable is rebuilt with changes.

  • 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).When a snapshot of the application's process is taken on an application that uses a persisted memory-mapped file, the process with the snapshot holds an exclusive lock on the memory-mapped file (even after the parent process has released its lock). Outros processos ainda serão capazes de ler, mas não de gravar no arquivo mapeado em memória.Other processes are still able to read, but not write, to the memory-mapped file.

    Solução alternativa:Workaround:

    • Elimine todos os instantâneos encerrando a sessão de depuração.Clear all snapshots by ending the debugging session.
  • Ao depurar um aplicativo cujo processo tenha um grande número de regiões de memória exclusivas, como um aplicativo que carrega um grande número de DLLs, o desempenho das etapas com instantâneos habilitados poderá ser afetado.When debugging an application whose process has a high number of unique memory regions, such as an application that loads a large number of DLLs, stepping performance with snapshots enabled may be impacted. Esse problema será abordado em uma versão futura do Windows.This issue will be addressed in a future version of Windows. Se você estiver enfrentando esse problema, contate-nos em stepback@microsoft.com.If you are experiencing this issue, reach out to us at stepback@microsoft.com.

  • Ao salvar um arquivo com Depurar > IntelliTrace > Salvar sessão do IntelliTrace no modo de eventos e instantâneos, os dados adicionais capturados de instantâneos não ficarão disponíveis no arquivo .itrace.When saving a file with Debug > IntelliTrace > Save IntelliTrace session under events and snapshots mode, the additional data captured from snapshots is not available in the .itrace file. 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.On breakpoint and step events, you see the same information as if you had saved the file in IntelliTrace events only mode.

Próximas etapasNext steps

Neste tutorial, você aprendeu como usar o retrocesso do IntelliTrace.In this tutorial, you've learned how to use IntelliTrace step-back. Pode ser interessante saber mais sobre outros recursos do IntelliTrace.You may want to learn more about other IntelliTrace features.