Depuração de viagem no tempo - Visão geral
O que é Depuração de Viagem no Tempo?
Time Travel Debugging é uma ferramenta que permite capturar um rastro do seu processo à medida que ele é executado e, em seguida, reproduzi-lo mais tarde, tanto para frente quanto para trás. O TTD (Time Travel Debugging) pode ajudá-lo a depurar problemas mais facilmente, 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 reproduza-o várias vezes para aprender a melhor forma de corrigir o problema.
O TTD pode ter vantagens sobre os arquivos de despejo de falha, que muitas vezes perdem o estado e o caminho de execução que levaram à falha final.
No caso de você não conseguir descobrir o problema sozinho, você pode compartilhar o rastreamento com um colega de trabalho e ele pode ver exatamente o que você está olhando. Isso pode permitir uma colaboração mais fácil do que a depuração ao vivo, já que as instruções gravadas são as mesmas, enquanto os locais de endereço e a execução do código serão diferentes em computadores diferentes. 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 funciona para adicionar o mínimo possível de sobrecarga, pois captura a execução de código em arquivos de rastreamento.
O TTD inclui um conjunto de objetos de modelo de dados do depurador para permitir que você consulte o rastreamento usando 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.
Requisitos
A depuração de viagem no tempo é integrada ao WinDbg, proporcionando uma experiência perfeita de gravação e repetição.
Para usar o TTD, você precisa executar o depurador elevado. Instale o WinDbg usando uma conta que tenha privilégios de administrador e use essa conta ao gravar no depurador. Para executar o depurador elevado, selecione e segure (ou clique com o botão direito do mouse) o ícone do WinDbg no menu Iniciar e, em seguida, selecione Mais > executar como administrador.
A gravação pode conter informações pessoalmente identificáveis ou relacionadas à segurança
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 de arquivo. As informações exatas dependem da atividade do processo alvo enquanto foram registradas. 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 registrar 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 avançados de gravação, 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 viagem no tempo - TTD.exe utilitário de linha de comando.
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 | Experiência interativa, vê fluxo de execução, pode alterar o estado de destino, ferramenta familiar em 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 em sistemas de produção. Com a reprodução, difícil de trabalhar de volta do ponto de falha para determinar a causa. |
Despejos | Sem codificação inicial, baixa intrusividade, com base em gatilhos. | Snapshots sucessivos ou despejos ao vivo fornecem uma visualização simples "ao longo do tempo". A sobrecarga é essencialmente zero se não for usada. |
Telemetria & logs | Leve, muitas vezes atrelada a cenários de negócios / ações do usuário, amigável ao aprendizado de máquina. | Problemas surgem em caminhos de código inesperados (sem telemetria). Falta de profundidade de dados, compilados estaticamente no código. |
Depuração de viagem no tempo (TTD) | Ótimo em bugs complexos, sem codificação inicial, depuração repetível offline, análise amigável, captura tudo. | Grande sobrecarga em tempo recorde. Pode coletar mais dados que são 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 abordam o básico do TTD e demonstram alguns recursos no WinDbg
Defrag Tools 186 - Jordi e JCAB demo mais grandes recursos 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 e o usuário do TTD precisa se certificar de que há espaço livre adequado 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 de arquivos de rastreamento para permitir cenários complexos de longa execução. Recriar rapidamente o problema, manterá o tamanho do arquivo de rastreamento o menor possível.
Arquivos de rastreamento e índice
Um arquivo de rastreamento (.run
) armazena a execução do código durante a gravação.
Quando a gravação é interrompida, um arquivo de índice (.idx
) é criado para otimizar o acesso às informações de rastreamento. Os arquivos de índice também são criados automaticamente quando o WinDbg abre arquivos de rastreamento.
Os arquivos de índice também podem ser grandes, normalmente duas vezes maiores 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 outra saída de gravação é gravada em um arquivo de log WinDbg.
Todos os arquivos de saída são armazenados em um local configurado pelo usuário. O local padrão é na pasta de documentos dos usuários. Por exemplo, para User1 os arquivos TTD seriam armazenados aqui:
C:\Users\User1\Documents
Para obter mais informações sobre como trabalhar os arquivos de rastreamento, consulte Depuração de viagem no tempo - Trabalhando com arquivos de rastreamento.
Coisas a observar
Incompatibilidades antivírus
Você pode encontrar incompatibilidades por causa de como o TTD se conecta ao processo para gravá-las. Normalmente, surgem problemas com antivírus ou outro software do sistema que está tentando rastrear e sombrear chamadas de memória do sistema. Se você tiver problemas com a gravação, como uma mensagem de permissão insuficiente, tente desabilitar 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 ambiente que entra em conflito com o TTD, seria o framework de aplicação de elétrons. Nesse caso, o rastreamento pode ser gravado, mas um bloqueio ou falha do processo que está sendo gravado também é possível.
Somente modo de usuário
Atualmente, o TTD suporta apenas a operação no modo de usuário, portanto, não é possível rastrear um processo no modo kernel.
Reprodução somente leitura
Você pode viajar no tempo, mas não pode mudar a história. Você pode usar comandos de leitura de memória, 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, portanto, o TTD não pode se injetar 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 cerca de um desempenho de 10x-20x em cenários típicos de gravação. Às vezes, não haverá uma lentidão perceptível, mas para operações mais intensivas em recursos (ou seja, caixa de diálogo Abrir arquivo), você pode ver o impacto da gravação.
Erros de arquivo de rastreamento
Há alguns casos em que erros de arquivo de rastreamento podem ocorrer. Para obter mais informações, consulte Depuração de viagem no tempo - Solução de problemas.
Recursos avançados de depuração de viagem no tempo
Aqui estão alguns dos recursos avançados TTD mais notáveis.
Linhas do tempo
As linhas do tempo são uma representação visual de eventos que acontecem durante a execução. Esses eventos podem ser locais de: pontos de interrupção, leitura/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 modelo de dados integrado - TTD inclui suporte a modelo 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 de '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 viagem no tempo - Introdução aos objetos de depuração de viagem no tempo.
Suporte a scripts
- Automação de scripts - O suporte a scripts para JavaScript e NatVis permite a automação da investigação de problemas. Para obter mais informações, consulte Depuração de viagem no tempo - Automação JavaScript.
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 viagem no tempo - TTD.exe utilitário de linha de comando.
Suporte a TTD de código gerenciado
Você pode usar a extensão de depuração SOS (sos.dll) em execução no modo de 64 bits para depurar 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
Revise estes tópicos para gravar e reproduzir um arquivo de rastreamento, bem como para obter informações sobre como trabalhar com arquivos de rastreamento e solução de problemas.
- Depuração de viagem no tempo - Gravar um rastreamento
- Depuração de viagem no tempo - Repetir um rastreamento
- Depuração de viagem no tempo - Trabalhando com arquivos de rastreamento
- Depuração de viagem no tempo - Solução de problemas
- Depuração de viagem no tempo - Passo a passo do aplicativo de exemplo
Estes tópicos descrevem a funcionalidade avançada adicional na depuração de viagem no tempo.