Partilhar via


Notas de lançamento para depuração de viagem no tempo

Logótipo de debug de 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 passar para o início do rastreamento).

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 frame atual, pode usar .TTD.VariableHistory() para obter um log dos valores escritos numa 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.

A API TTD Replay também está disponível em um SDK experimental. Esta API é a mesma que o depurador utiliza para interagir com o TTD e permite que .Calls() / .Memory() coletem dados de forma eficiente. Para obter mais informações, consulte https://aka.ms/ttdsdk.

Fixo

  • Corrigir falha causada pela preteriçã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. Este lançamento do TTD coincide com a versão de junho de 2025 do Windbg. Uma nova funcionalidade é que o objeto do modelo de dados Position agora apresenta a percentagem no rastreamento.

Alterado

  • Manutenção de infraestruturas diversas.
  • Use a implementação padrão ISO de C++ volátil. (1.11.518)
  • Adicione Porcentagem à projeção do modelo de dados Position. (1.11.514)

Fixo

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

1.11.506

Esta versão é uma versão menor para coincidir com a versão de abril de 2025 do WinDbg.

Alterado

  • Clicar numa posição TTD do modelo de dados (por exemplo, na lista de Módulos) leva até essa posição no rastreamento. (1.11.492)

    Nota: 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.

Fixo

  • Adicione o nome do processo ao ficheiro .out ao associar-se a um PID para facilitar a resolução de problemas. (1.11.486)

1.11.481

Renovámos o comando !tt para lhe dar formas mais poderosas de navegar pelo seu rastro.

  • Percentagens fracionárias podem ser usadas para reduzir o espaço de pesquisa (!tt 23,65)
  • Encontre a anterior/próxima vez que um registro alterar o valor (!tt br ebx)
  • Encontre a última/próxima ocorrência de acesso a um intervalo de memória (!tt ba- [addr] [range])
  • Encontre a execução anterior/próxima que for movida para um módulo diferente (!tt bm)
  • Encontre a execução anterior/próxima que for movida para um módulo específico (!tt bm ntdll)

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

Algumas correções notáveis:

  • As mensagens "Erro: valor de 64 bits perde precisão na conversão em número" ao usar @$cursession.TTD.Data.Heap() em rastreamento de 32 bits já não aparecem.
  • A análise da opção de ajuda (-?, -help) agora é detetada corretamente em qualquer lugar na 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 que mais se assemelha.
  • O TTD informa corretamente a versão do SO de destino a partir do comando vertarget.
  • Usar "-monitor" com um nome de serviço hospedado não registra mais serviços hospedados não relacionados.

Adicionado

  • Registrar pontos de interrupção de alteração em rastreamentos TTD (1.11.431)

Alterado

  • Corrigir a gravação de serviços por nome usando o modo de monitorização (1.11.477)
  • Capture informações reais do sistema operacional do sistema de destino para uso pelo depurador (1.11.473)
  • Corrigir a transferência de registradores XMM entre o emulador e CONTEXT (1.11.469)
  • Permitir consultas de chamada em endereços dentro de uma função (1.11.459)
  • Suporta símbolos como endereços/tamanhos na linha de comando !tt (1.11.454)
  • Melhorar a consistência e ampliar as capacidades dos comandos de navegação TTD (1.11.453)
  • Melhorar a consistência do módulo de banco de dados em face de dados corrompidos (1.11.430)

Fixo

  • Adicionar 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 para número" em alguns casos (1.11.471)
  • Melhorar a confiabilidade da gravação de um processo com pilhas de sombra ativadas (1.11.466)
  • Adicionar módulo de navegação 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 (zerando a parte superior do rax) (1.11.434)
  • Corrigir alguns bugs nos libfuzzer (1.11.433)

1.11.429

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

Nota: 1.11.410 introduziu 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:

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

1.11.410

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

O comando @$cursession.TTD.Calls() no depurador agora suporta caracteres curinga 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 (switch-monitor) está pronto para gravar novos processos.

Correções:

  • Corrija algumas condições de corrida ao inicializar o gravador.
  • Corrijamos como gravamos syscalls para que os pontos de interrupção funcionem corretamente.
  • Corrigir vários problemas relacionados à gravação seletiva do módulo.

ARM64 correções:

  • Corrigido um bug que impedia a gravação TTD em CPUs simples de nível ARM64v8.0.
  • Melhorado o sistema de mensagens ao tentar usar no ARM64 um rastreamento de um processo x86 ou x64.

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

  • Corrigida a incorreta emulação de LODS: em vez de zerar os bits não utilizados do RAX, eles agora são preservados corretamente.
  • Emulação fixa da instrução "pop ax" em processos x86/x64, que estava zerando incorretamente os bits superiores do registro completo (por exemplo, "pop ax" limpou os bits superiores do rax).
  • Emulação direta da instrução XGETBV (mais rápida).
  • Emulação direta de todos os movimentos AVX512 SIMD (mais rápido).

1.11.316

Corrigida uma regressão que causava falhas ocasionais durante a gravação de programas com longas sequências de instruções ininterruptas e pesadas em dados.

ARM64 correções:

  • A gravação em processos ARM64 que têm o recurso PAC ativado agora é suportada.
  • Corrigidas as instruções ANDS e TST, que não estavam conseguindo limpar as bandeiras de transporte e transbordamento.

Correções AMD/Intel:

  • Corrigido bug onde TTD emulava incorretamente "xchg r8,rax" e "xchg r8w,ax" como NOP.

1.11.304

TTD agora implementa e publica publicamente uma API para controlar o gravador de dentro do processo de gravação ao vivo. Documentação e um exemplo podem ser encontrados no GitHub.

TTD agora pode injetar-se com a gravação desligada usando o novo interruptor -recordMode. Por padrão, o TTD usa -recordMode Automatic, o que faz com que todos os threads sejam gravados. Se -recordMode Manual for especificado, o TTD injeta no processo de destino, mas não grava nada até ser instruído a fazê-lo por meio de uma chamada de API.

A gravação agora pode ser restrita a um conjunto específico de módulos usando o switch -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 interruptor de -module pode ser especificado.

Os componentes de registro e reproduçã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 erro de reprodução, os componentes de replay podem 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

Adicionado

  • Adicionar -recordmode interruptor para ativar a injeção sem gravação automática (1.11.296)
  • Adicionar o -module comutador e usar para criar configuração SR (1.11.291)
  • Dados personalizados do projeto gravados pela API em processo para o modelo de dados (1.11.286)
  • Adicione um novo TTDLiveRecorder.dll e conecte-o junto com TTDRecordCPU.dll (1.11.283)
  • Adicionar componentes de repetição ao MSIX, correção da pesquisa do SDK & (1.11.265)

Alterado

nenhum

Fixo

  • Contornar um bug no serializador JSON nlohmann, que é usado em algumas ferramentas internas (1.11.281)
  • Ajuste 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 dos relatórios de falhas do Watson (1.11.276)
  • Corrigir uma regressão que pode causar corrupção de arquivo de rastreamento em alguns casos (1.11.264)

Problemas conhecidos

  • No ARM64, o compilador está falhando ao chamar várias funções de alta frequência, o que, em casos extremos, pode fazer com que o gravador fique sem espaço na pilha e falhe.

1.11.261

Alterações notáveis nesta versão incluem:

  • [ARM64] Corrigido o comportamento das instruções SXTL, SQXTN2, SQXTUN2, UQXTN2, XTN2 e TRN1 quando o registro de destino é usado como fonte.
  • [ARM64] Corrigido 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 registros estavam sendo corrompidos).

Alterado

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

Fixo

  • Corrija instruções ARM64 defeituosas onde o registro de destino também é usado como fonte. (1.11.261)
  • Corrigir a solução alternativa Zen4 para retornar diretamente ao emulador. (1.11.222)

1.11.202

Esta versão corrige vários problemas encontrados durante os serviços de gravação ou o lançamento do processo de monitoramento através do -monitor switch. Ele também remove o suporte de gravação ARM32 do produto.

Alterado

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

Fixo

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

Removido

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

1.11.173

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

Alterado

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

Fixo

  • Corrija o conflito de ficheiros ao ler o ficheiro .out de um processo separado. (1.11.171)
  • Corrija falhas raras durante a repetição de rastreamento. (1.11.166)

1.11.163

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

Alterado

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

Fixo

  • Limpeza do EULA (1.11.161)

1.11.159

Esta 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 liberação pública do gravador de linha de comando, esta versão também inclui várias correções de bugs, incluindo algumas correções para o emulador de CPU.

O novo interruptor -timestampFileName permite a geração de arquivos .run com base em data e 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

  • Escolha o modo de injeção padrão no tempo de execução com base no rastreador usado (1.11.156)
  • Adicionar opção para ativar a geração de arquivos .run com base 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 MSIX BUNDLE para cada arquitetura (1.11.152)
  • Corrija vários problemas que surgiram ao testar o TTD construído com o Clang. (1.11.146)
  • Clang correções para TTDAnalyze (1.11.144)

Fixo

  • Revisão de feedback sobre o appinstaller / lançamento público (1.11.159)
  • Feedback do RC (1.11.157)
  • Evite descartar o registo Zero ao inicializar o RegisterInfo para apontar para Sink. (1.11.149)
  • Corrija a instrução TST com imediato e melhore 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 gravador MSIX (1.11.138)
  • Corrija todos os problemas para que Clang possa construir TTD. (1.11.137)
  • Introduzir -monitor X como forma de gravar um processo quando ele é iniciado (1.11.116)

Fixo

  • Corrigir emulação "CMP ZR" ARM64 (1.11.128)
  • Corrigir emulação AVX512 nos processadores Zen4 da AMD (1.11.127)
  • Corrija o mecanismo que o TTD usa para encontrar 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 comprometer o X28 (1.11.109)

Ver também

Depuração com Viagem no Tempo – Visão Geral

Depuração de viagem no tempo – Gravador de linha de comando