Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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().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.
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)
- Contribuiu com uma correção para essa biblioteca que ficará disponível em uma versão futura.
- 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,XTN2eTRN1quando 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
-accepteulaao 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)