Compartilhar via


Notas de versão de depuração de viagem no tempo

Logotipo de depuração da viagem no tempo com um relógio.

Este tópico fornece informações sobre o que há de novo na Depuração de Viagem no Tempo.

1.11.553

!tt sem argumentos agora mostra um breve texto de ajuda e a posição atual (em vez de mover para o início do traço).

Um novo método de modelo de dados permite que você veja o histórico dos valores de uma variável local. Dentro de um objeto Frame, como @$curframe para o quadro atual, você pode usar . TTD. VariableHistory() para obter um log dos valores gravados em uma variável e o intervalo de posições que a variável manteve esse valor.

  • dx -g @$curframe.TTD.VariableHistory().Variables exibe a lista de nomes de variáveis locais.
  • dx -g @$curframe.TTD.VariableHistory().Variables[n].Values exibe o histórico da variável local #n.

API TTD Replay também está disponível em um SDK experimental. Essa API é a mesma que o depurador usa para interagir com o TTD e é o que habilita .Calls() / .Memory() a coletar dados com eficiência. Para obter mais informações, consulte https://aka.ms/ttdsdk.

Correção

  • Correção de falha causada pela substituição de ErrorReporting::PrintError (1.11.553)

1.11.532

Esta versão é uma versão de manutenção que faz melhorias na robustez da gravação. Esta versão do TTD coincide com a versão de junho de 2025 do Windbg. Um novo recurso é que o modelo de dados de Posição passou a relatar a porcentagem no rastreamento.

Alterado

  • Manutenção de infraestrutura diversa.
  • Use a implementação padrão ISO do C++ volátil. (1.11.518)
  • Adicionar porcentagem à projeção do modelo de dados da Position. (1.11.514)

Correção

  • Aumente a robustez da manipulação do TTD de instruções decodificadas. (1.11.530)
  • Remova os usos de XSAVE no emulador e otimize a transferência de registro interno. (1.11.509)

1.11.506

Este release é um release menor para coincidir com a release de abril de 2025 do WinDbg.

Alterado

  • Ao clicar em uma posição TTD no modelo de dados (por exemplo, na lista de Módulos), você será direcionado para essa posição no rastreamento. (1.11.492)

    Observação: a janela de comando não mostrará a posição TTD atualizada até que a próxima etapa ou comando de execução seja executado.

Correção

  • Adicione o nome do processo ao arquivo .out ao anexar a um PID para ajudar na solução de problemas. (1.11.486)

1.11.481

Reestruturamos o comando !tt para oferecer novas maneiras mais poderosas de navegar pela sua trilha:

  • Percentuais fracionários podem ser usados para restringir o espaço de pesquisa (!tt 23,65)
  • Localizar a última/próxima vez que um registro altera valor (!tt br ebx)
  • Encontre a próxima/anterior vez em que um intervalo de memória é acessado (!tt ba- [addr] [intervalo])
  • Encontre o momento anterior ou próximo em que a execução se move para um módulo diferente (!tt bm)
  • Encontre o momento anterior/próximo em que a execução se move para um módulo específico (!tt bm ntdll)

Para obter mais informações, consulte !tt (viagem no tempo).

Algumas correções notáveis:

  • "Erro: a mensagem 'valor de 64 bits perde precisão na conversão para número' desapareceu ao usar @$cursession.TTD.Data.Heap() em rastreamento de 32 bits."
  • A análise de opções de ajuda (-?, -help) agora é detectada corretamente em qualquer lugar da linha de comando.
  • dx @$cursession.TTD.Calls() não requer mais endereços para corresponder ao início de uma função. Em vez disso, o endereço é mapeado para o início da função mais próxima que corresponda.
  • O TTD informa corretamente a versão do sistema operacional de destino através do comando vertarget.
  • Usar "-monitor" com um nome de serviço hospedado não registra mais serviços hospedados não relacionados.

Added

  • Pontos de interrupção de alteração de registro em rastreamentos TTD (1.11.431)

Alterado

  • Correção do registro de serviços por nome usando o modo monitor (1.11.477)
  • Capturar informações reais do sistema operacional do sistema de destino para uso pelo depurador (1.11.473)
  • Corrigir a transferência de registros XMM entre o emulador e CONTEXT (1.11.469)
  • Permitir consultas de chamada em endereços dentro de uma função (1.11.459)
  • Suporte para símbolos como endereços/tamanhos na linha de comando do !tt (1.11.454)
  • Aprimore a consistência e estenda os recursos dos comandos de navegação TTD (1.11.453)
  • Melhorar a consistência do banco de dados do módulo diante de dados corrompidos (1.11.430)

Correção

  • Adicionar o nome do processo à saída ao anexar ao PID (1.11.486)
  • TTD. Data.Heap() relata "Erro: valor de 64 bits perde precisão na conversão em número" em alguns casos (1.11.471)
  • Melhorar a confiabilidade da gravação de um processo com pilhas de sombra habilitadas (1.11.466)
  • Adicionar navegação de módulo via !tt bm e modelo de dados (1.11.462)
  • Corrija alguns problemas com a análise de linha de comando. (1.11.444)
  • Corrigir lodsd, carregar palavra dupla no endereço (zerar a parte superior do rax) (1.11.434)
  • Corrigir alguns bugs de libfuzzer (1.11.433)

1.11.429

Esta atualização do TTD contém correções de bugs, além de algumas alterações internas para melhorar a confiabilidade.

Nota: o 1.11.410 trouxe uma regressão na emulação da instrução Intel/AMD LODSD. Uma correção para essa regressão virá na próxima versão.

Correções:

  • Aprimore a robustez da leitura de pacotes e outras alterações diversas para melhorar a confiabilidade.
  • Corrija uma regressão na emulação para a instrução AVX VBROADCAST[I/F]128.
  • Corrija o acesso ao registro de exceção no ARM64 nos builds mais recentes do Windows.

1.11.410

Acessibilidade aprimorada: a interface de usuário de progresso agora é dimensionada corretamente com as alterações no tamanho do texto.

O comando @$cursession.TTD.Calls() no depurador agora é compatível com curingas que correspondem a um grande número de funções. Agora é possível consultar um grande número de funções (@$cursession.TTD.Calls("kernel32!*")).

Automação: uma nova opção de linha de comando -onMonitorReadyEvent indica quando o monitor de gravação (chave -monitor) está pronto para registrar novos processos.

Correções:

  • Correção de algumas condições de corrida durante a inicialização do gravador.
  • Correção da forma como gravamos syscalls para que os pontos de interrupção funcionem corretamente.
  • Correção de vários problemas relacionados à gravação seletiva de módulos.

Correções para ARM64:

  • Foi corrigido um bug que impedia a gravação de TTD em CPUs de nível ARM64v8.0 simples.
  • Aprimorou a mensagem ao tentar usar no ARM64 um rastreamento de um processo x86 ou x64.

Correções AMD/Intel (inclui alguns problemas relatados pelo Google):

  • Correção da emulação incorreta de LODS: em vez dos bits não utilizados do RAX deixarem de ser zerados, eles agora estão corretamente preservados.
  • Correção da emulação da instrução "pop ax" em processos x86/x64, que estava zerando incorretamente os bits superiores do registro completo (por exemplo, "pop ax" zerava os bits superiores de rax).
  • Emulação direta da instrução XGETBV (mais rápida).
  • Emulação direta de todos os movimentos SIMD AVX512 (mais rápidos).

1.11.316

Foi corrigida uma regressão que estava causando falhas ocasionais durante a gravação de programas com sequências longas e ininterruptas de instruções com muitos dados.

Correções para ARM64:

  • Agora é possível gravar em processos ARM64 que tenham o recurso PAC ativado.
  • Foram corrigidas as instruções ANDS e TST, que não estavam conseguindo limpar os sinalizadores de carry e estouro.

Correções para AMD/Intel:

  • Foi corrigido o bug em que o TTD emulava incorretamente o “xchg r8,rax” e o “xchg r8w,ax” como NOP.

1.11.304

A TTD agora implementa e disponibiliza publicamente uma API para controlar o gravador de dentro do processo gravado ao vivo. A documentação e um exemplo podem ser encontrados no GitHub.

O TTD agora pode ser injetado com a gravação desligada usando o novo comutador -recordMode. Por padrão, o TTD usa -recordMode Automatic, o que faz com que todos os threads sejam registrados. Se -recordMode Manual for especificado, o TTD injetará no processo de destino, mas não gravará nada até que seja dito para fazer isso por meio de uma chamada à API.

A gravação agora pode ser restrita a um conjunto específico de módulos usando o comutador -module. Em alguns cenários, essa restrição pode resultar em gravação substancialmente mais rápida e arquivos de rastreamento menores. Mais de um switch -module pode ser especificado.

Os componentes de registro e repetição correspondentes agora estão incluídos na distribuição. No caso de uma incompatibilidade entre o depurador e o gravador de linha de comando, ou um bug de repetição, os componentes de repetição poderão ser copiados para a instalação do depurador como uma solução alternativa até que um novo depurador seja lançado.

O local do arquivo instalado pode ser encontrado no PowerShell executando o seguinte comando:

ls (Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation

Added

  • Adicionar switch -recordmode para ativar a injeção sem gravação automática (1.11.296)
  • Adicionar switch -module e usar para criar a configuração SR (1.11.291)
  • Projetar dados personalizados registrados pela API em processo no modelo de dados (1.11.286)
  • Adicionar um novo TTDLiveRecorder.dll e conectá-lo junto com TTDRecordCPU.dll (1.11.283)
  • Adicionar componentes de repetição ao MSIX & corrigir a pesquisa de SDK (1.11.265)

Alterado

nenhum

Correção

  • Solucionar um bug no serializador nlohmann JSON, que é usado em algumas ferramentas internas (1.11.281)
  • Ajustar o alinhamento da cadeia de caracteres para evitar um bug CRT raro (1.11.279)
    • Reportado e corrigido nas bases de código VS e OS.
  • Várias pequenas correções de relatórios de falhas do Watson (1.11.276)
  • Corrigir uma regressão que pode causar corrupção do arquivo de rastreamento em alguns casos (1.11.264)

Problemas conhecidos

  • No ARM64, o compilador está falhando em realizar chamadas de retorno para várias funções de alta frequência de execução, o que, em casos extremos, pode fazer com que o gravador fique sem espaço de pilha e cause uma falha.

1.11.261

Alterações importantes nesta versão incluem:

  • [ARM64] Correção do comportamento das instruções SXTL, SQXTN2, SQXTUN2, UQXTN2, XTN2 e TRN1 quando o registro de destino é usado como origem.
  • [ARM64] Correção um problema que fazia com que o depurador mostrasse registradores SIMD com seus 64 bits inferiores duplicados nos 64 bits altos.
  • [AMD64] Correções de emulação AVX512 para os processadores Zen4 da AMD (os registradores estavam ficando corrompidos).

Alterado

  • Implemente um novo sistema de controle de versão especificamente para o emulador. (1.11.260)

Correção

  • Corrija instruções ARM64 defeituosas onde o registro de destino também é usado como origem. (1.11.261)
  • Corrija a solução alternativa do Zen4 para retornos diretos ao emulador. (1.11.222)

1.11.202

Esta versão corrige vários problemas encontrados durante a gravação de serviços ou a inicialização do processo de monitoramento por meio da opção -monitor . Ela também remove o suporte para gravação ARM32 do produto.

Alterado

  • Reduza o tamanho binário vinculando componentes TTD ao UCRT como uma DLL. (1.11.191)

Correção

  • Corrija a gravação de serviços. (1.11.193)
  • Corrigir vários problemas ao usar -monitor. (1.11.189)
  • Corrigir o quadro de pilha da função que preserva não voláteis ao executar fallbacks em x64 (1.11.188)
  • Buffer de saída reativado para TTD (1.11.187)
  • Corrigir o tratamento do identificador do GPO no ProcessMonitorServer (1.11.179)

Removido

  • Remover o código de gravação ARM32 do repositório (1.11.198)

1.11.173

Esta versão aumenta a visibilidade de algumas mensagens de erro, extraindo-as do arquivo .out e imprimindo-as no console. Ela também corrige uma falha rara durante a repetição do rastreamento.

Alterado

  • Extrair e imprimir mensagens de erro do arquivo .out (1.11.173)

Correção

  • Corrigir conflito de arquivo ao ler o arquivo .out de um processo separado. (1.11.171)
  • Corrigir falhas raras durante a repetição do rastreamento. (1.11.166)

1.11.163

Esta versão inclui suporte para gravação de processos x86 em máquinas x64.

Alterado

  • Corrigir a gravação x86 com instalação TTD x64 (1.11.163)

Correção

  • Limpeza de EULA (1.11.161)

1.11.159

Essa versão é a primeira versão pública do gravador de linha de comando. Juntamente com várias alterações necessárias para habilitar a versão pública do gravador de linha de comando, essa versão também inclui várias correções de bug, incluindo algumas correções no emulador de CPU.

O novo switch -timestampFileName permite a geração de arquivos .run com carimbo de data/hora. Essa opção é útil quando você está gravando muitas instâncias do mesmo processo e deseja minimizar o tempo de inicialização da gravação.

Alterado

  • Escolher o modo de injeção padrão em tempo de execução com base no qual o rastreador é usado (1.11.156)
  • Adicionar o switch para habilitar a geração de arquivos .run baseados em carimbo de data/hora (1.11.155)
  • Adicionar EULA e -accepteula ao TTD (1.11.154)
  • Adicionar ProcLaunchMon.sys ao MSIX (1.11.153)
  • Criar MSIX e MSIXBUNDLE por arco (1.11.152)
  • Corrija vários problemas que surgiram ao testar o TTD criado com o Clang. (1.11.146)
  • Correções do Clang para TTDAnalyze (1.11.144)

Correção

  • Ler feedback sobre o appinstaller/versão pública (1.11.159)
  • Comentários do RC (1.11.157)
  • Evite colocar o registro Zero na lixeira inicializando RegisterInfo para apontar para Sink. (1.11.149)
  • Corrija a instrução TST de imediato e aprimore o teste de unidade para cobri-lo e muito mais. (1.11.148)
  • Consolidar a decisão do processo protegido e desativar o uso do processo protegido (1.11.147)

1.11.138

Alterado

  • Criar MSIX de gravador (1.11.138)
  • Corrija todos os problemas para que Clang possa criar TTD. (1.11.137)
  • Introduza o -monitor X como forma de gravar um processo quando ele for iniciado (1.11.116)

Correção

  • Corrigir emulação "CMP ZR" ARM64 (1.11.128)
  • Corrigir emulação AVX512 nos processadores Zen4 da AMD (1.11.127)
  • Corrigir o mecanismo que o TTD usa para localizar arquivos para uma CPU específica (1.11.121)
  • Corrigir regressão TTD x86 (TTDRecordCPU.dll falha ao carregar) (1.11.110)
  • Corrigir o retorno ao caminho nativo no ARM64 para não colocar X28 na lixeira (1.11.109)

Confira também

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

Depuração de Viagem no Tempo – Gravador de linha de comando