Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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().VariablesExibe a lista de nomes de variáveis locais. -
dx -g @$curframe.TTD.VariableHistory().Variables[n].ValuesExibe 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)
- Contribuiu com uma correção para essa biblioteca que ficará disponível em uma versão futura.
- 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,XTN2eTRN1quando 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
-accepteulaao 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)