Partilhar via


Depuração de viagem no tempo - Visão geral

Captura de ecrã do logótipo de depuração de viagem no tempo com um relógio.

O que é a depuração de viagem no tempo?

A Depuração de Viagem no Tempo (TTD) é uma ferramenta que captura um traço do seu processo à medida que o executa e o reproduz mais tarde, tanto para a frente como para trás. O TTD ajuda você a depurar problemas, permitindo que você "retroceda" sua sessão do depurador, em vez de ter que reproduzir o problema até encontrar o bug.

O TTD permite que você volte no tempo para entender melhor as condições que levam ao bug e reproduzi-lo várias vezes para aprender a melhor forma de corrigir o problema.

O TTD tem vantagens sobre os arquivos de despejo de memória, que muitas vezes não capturam o estado do sistema e o caminho de execução que levaram à falha final.

Se você não conseguir descobrir o problema sozinho, você pode compartilhar o rastreamento com um colega de trabalho para que ele possa ver exatamente o que você está vendo. Esse recurso torna a colaboração mais fácil do que a depuração ao vivo, já que as instruções gravadas são as mesmas, enquanto os endereços de memória e a execução de código diferem em diferentes PCs. Você também pode compartilhar um ponto específico no tempo para ajudar seu colega de trabalho a descobrir por onde começar.

O TTD é eficiente e trabalha para adicionar o mínimo de sobrecarga possível, pois captura a execução de código em arquivos de rastreamento.

O TTD inclui um conjunto de objetos do modelo de dados do depurador que podem ser usados para consultar o traço com o LINQ. Por exemplo, você pode usar objetos TTD para localizar quando um módulo de código específico foi carregado ou localizar todas as exceções.

Captura de tela do WinDbg com o comando Time Travel Debugging e três linhas do tempo.

Requerimentos

Time Travel Debugging é integrado com WinDbg, proporcionando uma experiência de gravação e reprodução sem falhas.

Para usar o TTD, você precisa executar o depurador com permissões elevadas. Instale o WinDbg usando uma conta que tenha privilégios de administrador e use essa conta ao gravar no depurador. Para executar o depurador com permissões elevadas, selecione e mantenha pressionado (ou clique com o botão direito do mouse) o ícone do WinDbg no menu Iniciar e, em seguida, selecione Mais > Executar como administrador.

Notas de lançamento

A TTD continua a evoluir. Para obter as informações mais recentes, consulte Notas de versão de depuração para viagem no tempo.

O arquivo de rastreamento criado que contém a gravação pode conter informações pessoalmente identificáveis ou relacionadas à segurança, incluindo, mas não necessariamente limitado a caminhos de arquivo, registro, memória ou conteúdo do arquivo. As informações exatas dependem da atividade do processo alvo enquanto foram gravadas. Esteja ciente disso ao compartilhar arquivos de gravação com outras pessoas.

TTD.exe utilitário de gravação de linha de comando

Além de gravar rastreamentos na interface do usuário do WinDbg, há um utilitário de linha de comando TTD.exe disponível para registrar um rastreamento.

Você pode ter cenários onde apenas o gravador de linha de comando TTD é necessário: gravação em um PC sem instalar o depurador, cenários de gravação avançada, automação de teste, etc. Nesses cenários, você pode instalar apenas o gravador de linha de comando TTD por meio de uma URL. Para obter mais informações, consulte Depuração de Linha de Comando TTD.exe - Viagem no Tempo.

Comparação de ferramentas de depuração

Esta tabela resume os prós e contras das diferentes soluções de depuração disponíveis.

Abordagem Vantagens Desvantagens
Depuração ao vivo Uma experiência interativa, que visualiza o fluxo de execução, pode alterar o estado de destino, uma ferramenta familiar em um ambiente familiar. Interrompe a experiência do usuário, pode exigir esforço para reproduzir o problema repetidamente, pode afetar a segurança, nem sempre uma opção nos sistemas de produção. Com a dificuldade de reprodução, é difícil trabalhar a partir do ponto de falha para determinar a causa.
Aterros Sem codificação inicial, baixa intrusividade, com base em gatilhos. Snapshots sucessivos ou live dumps fornecem uma visão simples "ao longo do tempo". A sobrecarga é essencialmente zero se não for usada.
Telemetria e registos Leve, muitas vezes ligado a cenários de negócios / ações do usuário, machine learning friendly. Problemas surgem em caminhos de código inesperados (sem telemetria). Falta de profundidade nos dados, compilados de forma estática no código.
Depuração de viagem no tempo (TTD) Excelente em lidar com bugs complexos, sem necessidade de codificação antecipada, depuração repetível offline, facilita a análise, regista tudo. Grande sobrecarga em tempo recorde. Pode recolher mais dados necessários. Os arquivos de dados podem se tornar grandes.

Treinamento em vídeo

Para saber mais sobre TTD, veja estes vídeos.

Defrag Tools 185 - Ivette e JamesP repassam os conceitos básicos do TTD e demonstram alguns recursos do WinDbg

Defrag Tools 186 - Jordi e JCAB demonstram mais excelentes características do TTD no WinDbg

CppCon (YouTube) - Jordi, Ken e JamesM apresentaram TTD no WinDbg na CppCon 2017

Noções básicas sobre arquivos de rastreamento

Tamanho do arquivo de rastreamento

O arquivo de rastreamento pode ficar grande. Você precisa ter certeza de que há espaço livre suficiente disponível. Se você gravar um programa por alguns minutos, os arquivos de rastreamento podem crescer rapidamente para vários gigabytes. O TTD não define um tamanho máximo para arquivos de rastreamento para permitir cenários complexos de longa execução. A recriação rápida do problema mantém o tamanho do ficheiro de rastreio o mais pequeno possível.

Arquivos de rastreamento e índice

Um arquivo de rastreamento (.run) armazena a execução do código durante a gravação.

Quando você interrompe a gravação, o sistema cria um arquivo de índice (.idx) para otimizar o acesso às informações de rastreamento. WinDbg também cria automaticamente arquivos de índice quando abre arquivos de rastreamento.

Os arquivos de índice podem ser grandes, normalmente duas vezes maiores do que o arquivo de rastreamento.

Você pode recriar o arquivo de índice a partir do arquivo de rastreamento usando o !tt.index comando.

0:000> !tt.index
Successfully created the index in 10ms.

Erros de gravação e outras saídas de gravação vão para um arquivo de log WinDbg.

Você armazena todos os arquivos de saída em um local configurado. O local padrão é na pasta de documentos do usuário. Por exemplo, para User1, os arquivos TTD são armazenados aqui:

C:\Users\User1\Documents

Para obter mais informações sobre como trabalhar com arquivos de rastreamento, consulte Depuração de viagem no tempo - Trabalhando com arquivos de rastreamento.

Aspetos a que deve estar atento

Incompatibilidades antivírus

Você pode encontrar incompatibilidades por causa de como o TTD se conecta aos processos para gravá-los. Normalmente, surgem problemas com antivírus ou outro software de sistema que tenta rastrear e sombrear chamadas de memória do sistema. Se tiver problemas com a gravação, como uma mensagem de permissão insuficiente, tente desativar temporariamente qualquer software antivírus.

Outros utilitários que tentam bloquear o acesso à memória também podem ser problemáticos. Por exemplo, o Microsoft Enhanced Mitigation Experience Toolkit.

Outro exemplo de um ambiente que entra em conflito com o TTD é a estrutura de aplicação Electron. Neste caso, o rastreamento pode gravar, mas um deadlock ou falha do processo que está sendo registrado também é possível.

Apenas no modo de utilizador

Atualmente, o TTD suporta apenas a operação do modo de usuário, portanto, você não pode rastrear um processo de modo kernel.

Reprodução só de leitura

Você pode viajar no tempo, mas não pode mudar a história. Você pode usar comandos de memória de leitura, mas não pode usar comandos que modificam ou gravam na memória.

Processos protegidos pelo sistema

Alguns processos protegidos pelo sistema Windows, como o processo PPL (Protected Process Light), são protegidos. TTD não pode injetar-se no processo protegido para permitir a gravação da execução do código.

Impacto da gravação no desempenho

A gravação de um aplicativo ou processo afeta o desempenho do PC. A sobrecarga de desempenho real varia com base na quantidade e no tipo de código que está sendo executado durante a gravação. Você pode esperar uma queda de desempenho de cerca de 10x a 20x em cenários típicos de gravação. Às vezes, não há uma lentidão percetível na interface do usuário. Mas para as operações que consomem mais recursos, como a caixa de diálogo Abrir arquivo, você vê o impacto da gravação.

Erros de ficheiro de rastreamento

Erros de arquivo de rastreamento podem ocorrer. Para obter mais informações, consulte Depuração Temporal - Solução de problemas.

Funcionalidades avançadas da Depuração de Retrocesso Temporal

Linhas cronológicas

As linhas do tempo são uma representação visual de eventos que acontecem durante a execução. Esses eventos podem ocorrer nos seguintes locais: pontos de interrupção, leitura e gravação de memória, chamadas e retornos de função, e exceções. Para obter mais informações sobre linhas do tempo, consulte WinDbg - Linhas do tempo.

Suporte ao modelo de dados do depurador

  • Suporte a modelos de dados integrados - O TTD inclui suporte a modelos de dados. Usar consultas LINQ para analisar falhas de aplicativos pode ser uma ferramenta poderosa. Você pode usar a janela do modelo de dados no WinDbg para trabalhar com uma versão expansível e navegável do dx e dx -g, permitindo que você crie tabelas usando consultas NatVis, JavaScript e LINQ.

Para obter informações gerais sobre o modelo de dados do depurador, consulte WinDbg - Modelo de dados. Para obter informações sobre como trabalhar com o modelo de objeto do depurador TTD, consulte Depuração de Time Travel - Introdução aos objetos de depuração de Time Travel.

Suporte a scripts

Para obter informações gerais sobre como trabalhar com JavaScript e NatVis, consulte WinDbg - Scripting.

TTD.exe Utilitário de linha de comando

O utilitário de linha de comando TTD.exe para registrar rastreamentos está disponível. Para obter mais informações, consulte Depuração de Linha de Comando TTD.exe - Viagem no Tempo.

Suporte a código gerido TTD

Você pode usar a extensão de depuração SOS (sos.dll) em execução no modo de 64 bits para depurar o código gerenciado usando TTD no WinDbg. Para obter mais informações, consulte Depurando código gerenciado usando o depurador do Windows.

Introdução ao TTD

Comece aqui

Se você é novo no TTD, siga este caminho de aprendizagem:

  1. Gravar um rastreamento - Capture seu primeiro rastreamento de execução
  2. Reproduzir um rastreio - Navegue e analise a sua gravação
  3. Exemplo de passo a passo do aplicativo - Exemplo de depuração passo a passo

Precisa de ajuda?

Funcionalidades avançadas