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 artigo descreve quando e como usar o utilitário de linha de comando TTD.exe para registrar rastreamentos do Time Travel Debugging (TTD). O utilitário de linha de comando TTD.exe permite que você registre o aplicativo ou processe a execução, salve-o em um arquivo de rastreamento e reproduza-o no WinDbg para diagnosticar problemas de execução de código.
Neste artigo, você aprenderá o seguinte:
- Quando usar TTD.exe versus a interface do usuário do WinDbg
- Como instalar e configurar TTD.exe
- Três maneiras de registrar rastreamentos (iniciar, anexar, monitorar)
- Opções de linha de comando e cenários avançados
Quando usar o utilitário de linha de comando TTD.exe
A TTD (Depuração de Viagem no Tempo) permite que você registre a execução de código de um aplicativo ou processo e salve-o em um arquivo de rastreamento. Você pode reproduzir o arquivo no depurador do Windows para localizar um problema com a execução do código.
Para muitos cenários, a maneira mais fácil de usar o TTD para registrar um aplicativo ou processo é diretamente da interface do usuário do WinDbg. Se você não estiver familiarizado com a Depuração de Viagem no Tempo, comece com a Depuração de Viagem no Tempo – Visão geral para aprender as noções básicas usando a interface WinDbg.
Você pode ter cenários em que precisa apenas do gravador de linha de comando TTD: gravação em um computador sem instalar o depurador, cenários avançados de gravação, automação de teste e assim por diante. Nesses cenários, você pode instalar apenas o gravador de linha de comando TTD por meio de uma URL.
A gravação TTD afeta o processo gravado
A gravação TTD é uma tecnologia invasiva. Você percebe uma desaceleração de 5x a 20x ou mais no aplicativo ou processo em execução durante a gravação, dependendo do aplicativo e das opções de gravação selecionadas.
Os arquivos de rastreamento criados crescem com o tempo e podem ocupar um espaço de armazenamento significativo. Trabalhe para rastrear pelo menor período de tempo, capturando a atividade do programa de interesse e, em seguida, feche o rastreamento o mais rápido possível.
Depois que o TTD é anexado a um processo, ele não pode se remover sozinho. Feche o aplicativo ou encerre o processo assim que a gravação do TTD estiver concluída. Para processos críticos do sistema, essa ação requer uma reinicialização do sistema operacional.
As gravações TTD podem conter informações relacionadas à segurança ou identificáveis pessoalmente
Importante
As gravações TTD capturam conteúdo de memória e podem conter informações relacionadas à segurança ou identificáveis pessoalmente, incluindo, mas não necessariamente, limitadas a caminhos de arquivo, registro, memória ou conteúdo de arquivo. As informações exatas dependem da atividade do processo de destino enquanto foram registradas.
Baixar e instalar o utilitário de linha de comando TTD.exe (método preferencial)
Baixe o utilitário de linha de comando TTD de https://aka.ms/ttd/download.
Selecione Instalar e o TTD será baixado e instalado. O comando TTD é adicionado ao caminho do sistema e está disponível para uso no prompt de comando quando a instalação é concluída.
Dica
Após a instalação, abra um novo prompt de comando e digite ttd.exe -help para verificar se a instalação foi bem-sucedida.
Se você encontrar dificuldades para instalar, consulte Solucionar problemas de instalação com o arquivo do Instalador de Aplicativo.
Em alguns computadores, talvez seja necessário instalar o Microsoft App Installer para Windows 10. Ele está disponível no aplicativo da Microsoft Store no Windows. O Gerenciador de Pacotes do Windows é compatível com o Instalador de Aplicativo a partir do Windows 10 1809.
Baixar e instalar o utilitário de linha de comando TTD.exe (método offline)
Embora o método de instalação preferido seja usar o App Installer, você também pode baixar o pacote de linha de comando TTD e extrair os arquivos manualmente. Aqui estão duas maneiras de fazer isso.
Extrair os arquivos de um utilitário de linha de comando TTD.exe instalado
Se você já tiver instalado o utilitário de linha de comando TTD, poderá extrair os arquivos do local instalado. No PowerShell, execute o seguinte comando para localizar o diretório instalado:
(Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation
A partir daí, você pode copiar todos os binários (*.dll, *.exe, *.sys) para um novo local. Aqui está uma maneira de fazer isso no PowerShell:
robocopy.exe (Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation c:\myttd *.exe *.dll *.sys /E /XD AppxMetadata
Substitua "c:\myttd" pelo destino de sua escolha. O resultado é semelhante a este (em um computador x64):
ls -Recurse c:\myttd
Directory: C:\myttd
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 11/9/2023 2:43 PM x86
-a--- 11/9/2023 2:43 PM 79240 ProcLaunchMon.sys
-a--- 11/9/2023 2:43 PM 112568 TTD.exe
-a--- 11/9/2023 2:43 PM 309176 TTDInject.exe
-a--- 11/9/2023 2:43 PM 55328 TTDLoader.dll
-a--- 11/9/2023 2:43 PM 821176 TTDRecord.dll
-a--- 11/9/2023 2:43 PM 1222584 TTDRecordCPU.dll
-a--- 11/9/2023 2:43 PM 63416 TTDRecordUI.dll
Directory: C:\myttd\x86
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 11/9/2023 2:43 PM 247728 TTDInject.exe
-a--- 11/9/2023 2:43 PM 42928 TTDLoader.dll
-a--- 11/9/2023 2:43 PM 1128480 TTDRecordCPU.dll
Observe que os binários x86 estão em um subdiretório. Se você não precisar gravar processos de 32 bits, poderá excluir essa pasta (e pode adicionar /xd x86 ao comando robocopy para evitar copiá-la em primeiro lugar). A versão ARM64 não possui subdiretórios.
O arquivo TTDRecordUI.dll só será necessário se você quiser usar a interface do usuário para controlar a gravação. Se você não quiser a interface do usuário, poderá excluir esse arquivo.
Baixar e extrair manualmente o pacote do utilitário de linha de comando TTD.exe
Se você não quiser instalar o utilitário de linha de comando TTD, poderá baixar o pacote e extrair os arquivos manualmente. O seguinte script do PowerShell:
- Obtém a URL da versão atual do TTD de https://aka.ms/ttd/download.
- Baixa o pacote MSIX.
- Extrai o MSIX da arquitetura solicitada do pacote MSIX.
- Extrai os binários TTD do MSIX.
param(
$OutDir = ".",
[ValidateSet("x64", "x86", "arm64")]
$Arch = "x64"
)
# Ensure the output directory exists
if (!(Test-Path $OutDir)) {
$null = mkdir $OutDir
}
# Ensure the temp directory exists
$TempDir = Join-Path $OutDir "TempTtd"
if (!(Test-Path $TempDir)) {
$null = mkdir $TempDir
}
# Determine if the destination already contains binaries
$extensions = @('.dll', '.exe', '.sys')
$existingBinaries = (Get-ChildItem -recurse $OutDir | Where-Object Extension -In $extensions).Count -gt 0
# Download the appinstaller to find the current uri for the msixbundle
Invoke-WebRequest https://aka.ms/ttd/download -OutFile $TempDir\ttd.appinstaller
# Download the msixbundle
$msixBundleUri = ([xml](Get-Content $TempDir\ttd.appinstaller)).AppInstaller.MainBundle.Uri
if ($PSVersionTable.PSVersion.Major -lt 6) {
# This is a workaround to get better performance on older versions of PowerShell
$ProgressPreference = 'SilentlyContinue'
}
# Download the msixbundle (but name as zip for older versions of Expand-Archive)
Invoke-WebRequest $msixBundleUri -OutFile $TempDir\ttd.zip
# Extract the 3 msix files (plus other files)
Expand-Archive -DestinationPath $TempDir\UnzippedBundle $TempDir\ttd.zip -Force
# Expand the build you want - also renaming the msix to zip for Windows PowerShell
$fileName = switch ($Arch) {
"x64" { "TTD-x64" }
"x86" { "TTD-x86" }
"arm64" { "TTD-ARM64" }
}
# Rename msix (for older versions of Expand-Archive) and extract the debugger
Rename-Item "$TempDir\UnzippedBundle\$fileName.msix" "$fileName.zip"
Expand-Archive -DestinationPath "$OutDir" "$TempDir\UnzippedBundle\$fileName.zip"
# Delete the temp directory
Remove-Item $TempDir -Recurse -Force
# Remove unnecessary files, if it is safe to do so
if (-not $existingBinaries) {
Get-ChildItem -Recurse -File $OutDir |
Where-Object Extension -NotIn $extensions |
Remove-Item -Force
Remove-Item -Recurse -Force (Join-Path $OutDir "AppxMetadata")
} else {
Write-Host "Detected pre-existing binaries in '$OutDir' so did not remove any files from TTD package."
}
Supondo que você salve o script anterior como Get-Ttd.ps1, execute-o assim para baixar os binários x64 para o diretório c:\myttd:
md c:\myttd
cd c:\myttd
.\Get-Ttd.ps1
Ou especifique o diretório de saída e a arquitetura:
.\Get-Ttd.ps1 -OutDir c:\myttd-arm64 -Arch arm64
Substitua "c:\myttd" ou "c:\myttd-arm64" pelo destino de sua escolha.
Gravar um rastreamento usando o utilitário de linha de comando TTD.exe
Você pode gravar um rastreamento de três maneiras:
| Método | Mais adequado para | Cenário de exemplo |
|---|---|---|
| Lançar | Iniciando um novo processo com argumentos específicos | Gravando uma ferramenta de linha de comando como ping.exe |
| Anexar | Gravando um processo já em execução | Debugando um serviço ou uma aplicação de execução longa |
| Monitor | Gravação automática sempre que um processo é iniciado | Capturando problemas intermitentes ou problemas de inicialização |
Depois de começar a gravar o processo, dispare o problema que deseja depurar. Você pode abrir um arquivo problemático ou selecionar um botão específico no aplicativo para causar o evento de interesse. Quando o aplicativo que você está gravando termina, naturalmente ou falhando, o arquivo de rastreamento é finalizado.
Dica
O registro de rastreamentos TTD requer direitos administrativos. Normalmente, você executa ttd.exe de um prompt de comando de administrador.
Para obter mais informações sobre como gravar um rastreamento de viagem no tempo usando o WinDbg, consulte Depuração de Viagem no Tempo – Gravar um rastreamento.
Iniciar um processo
-launch <Program> [<arguments>]
Inicie e rastreie o programa (modo padrão).
Esse modo é o único modo que permite passar argumentos para o programa. O programa é iniciado com os mesmos privilégios que TTD.exe (como administrador). Use -attach ou -monitor para gravar o programa com seu conjunto normal de privilégios.
A inclusão -launch é opcional, mas você pode usá-la para maior clareza.
O primeiro argumento não reconhecido que não começa com - ou /é considerado um caminho executável para iniciar, e quaisquer argumentos subsequentes são considerados os argumentos para esse programa.
Por exemplo, use TTD.exe notepad.exe para iniciar e gravar o Bloco de Notas. O rastreamento é interrompido quando você fecha o Bloco de Notas.
Para obter um exemplo de uso, consulte Exemplos de uso de cenário – gravando um processo.
Anexar a um processo
-attach <PID>
Anexe a um processo em execução especificado pela ID do processo. Use o Gerenciador de Tarefas ou o utilitário TaskList para identificar números de processo. Para obter mais informações, consulte Localizando a ID do processo.
Por exemplo, use TTD.exe -attach 21440 -out C:\traces\MyTraceFile.run para iniciar e gravar o processo com uma ID de 21440 e salvar o rastreamento em MyTraceFile.run.
Verifique se o diretório existe (C:\traces neste exemplo) antes de executar TTD.exe.
Para obter um exemplo de uso, consulte Cenário – Localizar e anexar a um processo em execução.
Monitorar um processo
-monitor <Program>
A opção monitor permite monitorar e rastrear um programa sempre que ele é iniciado. Para usar essa opção, você deve especificar um caminho completo para o local de saída com -out.
Para interromper o monitoramento, pressione Ctrl+C.
Os principais benefícios do monitoramento em comparação com os outros métodos são:
- Você pode iniciar o aplicativo de destino da maneira normal, sem necessidade de descobrir a linha de comando para iniciá-lo.
- O aplicativo de destino é executado com seus privilégios normais. Se você iniciar o aplicativo diretamente de ttd.exe, ele será iniciado com privilégios elevados e essa alteração poderá afetar o comportamento do programa.
- É útil para automação (use um script que monitora o lançamento de um programa e coleta um rastro).
Você pode especificar a opção -monitor mais de uma vez para monitorar vários programas.
Para obter um exemplo de uso, consulte Exemplos de uso do cenário – processos de monitoramento.
Opções de linha de comando
Sintaxe
TTD.exe [options] [mode] [program [<arguments>]]
-? | -help
Exiba a ajuda da linha de comando.
Modos
-launch <Program> [<arguments>]
Inicie e rastreie o programa (modo padrão).
Esse modo é o único modo que permite passar argumentos para o programa. A -launch opção deve ser a última opção TTD na linha de comando, seguida pelo programa a ser iniciado e quaisquer argumentos que o programa exija. Se você não especificar um modo, a ferramenta o tratará como uma inicialização. Por exemplo, TTD.exe -out C:\traces ping.exe msn.com é tratado como uma inicialização.
-attach <PID>
Anexe a um processo em execução especificado pela ID do processo. Use o Gerenciador de Tarefas ou o utilitário TaskList para identificar as IDs do processo. Para obter mais informações, consulte Localizando a ID do processo.
-monitor <Program>
Rastrear programas ou serviços sempre que eles forem iniciados (até a reinicialização). Para usar essa opção, você deve especificar um caminho completo para o local de saída com -out.
Opções básicas de linha de comando
-out <path>
Especifique um nome de arquivo de rastreamento ou um diretório. Se você especificar um diretório, ele já deverá existir. Se você especificar um nome de arquivo, o nome do arquivo não deverá existir.
-noUI
Desativa a interface do usuário para controle manual da gravação. Use essa opção para cenários de automação em que você não precisa de controle interativo.
Se você não selecionar essa opção, uma interface do usuário pequena será exibida quando a gravação estiver ativa:
A interface do usuário fornece dois controles:
- Rastreamento desativado – interrompe o rastreamento e o aplicativo continua em execução
- Sair do aplicativo – fecha o aplicativo e interrompe o rastreamento
-accepteula
Use esta opção para aceitar o contrato de licença de usuário do EULA. Use essa opção em cenários de automação, depois de examinar e aceitar o EULA.
O TTD exibe o EULA na primeira vez em que é executado. Digite Y ou N para aceitar o EULA. Depois de aceito, o EULA não aparece mais na inicialização. Se você não aceitar o EULA, o TTD sairá e exibirá o EULA na próxima vez que ele for executado.
Controle de rastreamento
-stop <process name> | <PID> | all
Pare de rastrear o nome do processo especificado, o PID ou "todos".
-wait <timeout>
Aguarde até o número especificado de segundos para que todas as sessões de rastreamento no sistema terminem. Especifique -1 para aguardar infinitamente.
-tracingOff
Inicia o aplicativo com a gravação de rastreamento desativada. Você pode usar a caixa de seleção da interface do usuário para ativar o rastreamento novamente depois que ele for desativado.
Opções adicionais de linha de comando
-children
Grave o processo alvo e todos os processos criados pelo processo alvo. Cada processo filho é registrado em seu próprio arquivo de rastreamento.
-cmdLineFilter "<string>"
Registre o processo de destino se sua linha de comando contiver a cadeia de caracteres. Esta opção funciona apenas com -monitor o modo. É útil quando o argumento de linha de comando identifica exclusivamente o processo em que você está interessado. Por exemplo, -monitor notepad.exe -cmdLineFilter "specialfile.txt" os registros notepad.exe somente se specialfile.txt aparecer na linha de comando.
-cleanup
Desinstale o driver do monitor de processo.
Configurações de comportamento de rastreamento
-timestampFilename
Adiciona um carimbo de data/hora à última parte do nome do arquivo de rastreamento. Por exemplo, ping_2023-06-17_103116.run.
Para gravar ping.exe com um carimbo de data e hora no nome do arquivo, use o seguinte comando.
ttd.exe -out c:\traces -timestampFilename ping.exe msn.com
Por padrão, o gravador verifica sequencialmente o diretório de saída para localizar um nome de arquivo não utilizado. Se você gravarping.exe, o gravador tentará ping01.runping02.rune assim por diante até encontrar um nome de arquivo não utilizado. Para a maioria dos cenários, esse método de nomenclatura é suficiente. No entanto, se você quiser gravar o mesmo programa muitas vezes, o algoritmo de nomenclatura de arquivo padrão poderá se tornar ineficiente quando um grande número de arquivos existentes estiver presente.
-ring
Envia rastreamentos para um buffer de anel. O tamanho do arquivo não cresce além dos limites especificados por -maxFile. Somente a última parte da gravação que se encaixa dentro do tamanho determinado é salva.
-maxFile <size>
Tamanho máximo do arquivo de rastreamento em MB. Quando estiver no modo de rastreamento completo, o padrão é 1.024 GB e o valor mínimo é de 1 MB. Quando estiver no modo buffer de anel, o padrão é 2.048 MB, o valor mínimo é de 1 MB e o valor máximo é de 32.768 MB.
O padrão para anel na memória em processos de 32 bits é 256 MB.
-maxConcurrentRecordings <count>
Número máximo de gravações que podem estar em andamento a qualquer momento. Se você não especificar esse valor, um número ilimitado de gravações poderá ocorrer simultaneamente.
-numVCpu <number>
Especifica o número de CPUs virtuais a serem reservadas e usadas durante o rastreamento. Esse valor afeta a sobrecarga total de memória colocada na memória do processo convidado pelo TTD. Se você não especificar esse valor, o padrão por plataforma será 55 para x64/ARM64 e 32 para x86.
Altere essa configuração para limitar o impacto na memória somente se você estiver ficando sem memória. A redução do numVCpu valor pode afetar severamente o desempenho do rastreamento e só deve ser feita para contornar problemas de uso de memória.
Se TTD.exe falhar ao gravar ou o arquivo .out indicar uma simulação de 0 segundos, usar -numVCpu poderá permitir que a gravação tenha sucesso.
-replayCpuSupport <support>
Especifica o suporte esperado das CPUs que reproduzem o traço. A configuração padrão é recomendada para portabilidade de rastreamentos entre computadores, mas você pode usar outras opções para produzir arquivos de rastreamento menores e registrar mais rapidamente, dependendo das instruções específicas usadas pelo programa de destino.
Valores <support>
| Valor | Descrição |
|---|---|
Default |
O suporte à CPU padrão requer apenas suporte básico disponível na CPU de reprodução. |
MostConservative |
Não requer suporte especial na CPU de replay. Adequado para rastreamentos que são reproduzidos em uma arquitetura de CPU completamente diferente, como um rastreamento Intel na CPU ARM64. |
MostAggressive |
Pressupõe que a CPU de reprodução seja semelhante e de capacidade igual ou maior do que a CPU usada para registrar. |
IntelAvxRequired |
Pressupõe que a CPU de reprodução seja a CPU intel/AMD de 64 bits que dá suporte ao AVX. |
IntelAvx2Required |
Pressupõe que a CPU de repetição seja uma CPU Intel/AMD de 64 bits com suporte a AVX2. |
Reduzindo a sobrecarga de rastreamento
Embora o TTD seja muito eficiente para o que faz (rastreamento completo do nível de instrução codificado em menos de um byte/instrução em média), ele ainda tem uma sobrecarga perceptível durante a gravação. As CPUs modernas podem executar bilhões de instruções por segundo, tornando caro até mesmo um byte/instrução. Em muitos casos, não é necessário registrar todo o processo.
As seguintes opções podem ser usadas para reduzir a sobrecarga do rastreamento:
-module <module name>
Registre apenas o módulo especificado (como comdlg32.dll) e o código que ele chama. Pode ser o próprio executável ou qualquer DLL carregada pelo executável. Essa opção pode ser especificada mais de uma vez para gravar vários módulos.
Quando essa opção é usada, o processo de destino é executado em velocidade máxima até que o código no(s) módulo(s) especificado(s) seja executado. O TTD gravará o processo até que a execução saia do(s) módulo(s) especificado(s), momento em que a gravação é desativada e o destino retorna à velocidade máxima. Como ativar/desativar a gravação é caro, o TTD deixará a gravação ativada quando um módulo especificado chamar outros módulos no processo.
-recordmode <Automatic | Manual>
Normalmente, a gravação começa assim que o TTD se injeta no processo de destino (modo "Automático", o padrão). Se o seu programa usa a API de gravação em processo do TTD para controlar quando a gravação ocorre, você pode usar o modo "Manual" para ser executado em velocidade máxima até que seu programa chame a API para iniciar a gravação.
O uso dessas opções pode resultar em uma redução significativa na sobrecarga de gravação e no tamanho do arquivo de rastreamento. A depuração de um rastreamento registrado com essas opções não é diferente de um rastreamento de todo o processo. Sempre que você chegar a um local no rastreamento em que a gravação está desativada, a próxima instrução no rastreamento é a primeira instrução executada quando a gravação é retomada.
Configurações relacionadas ao evento
-passThroughExit
Passe o valor de saída do processo convidado como o valor de saída do TTD.exe. Esse valor está disponível para arquivos em lote por meio da %ERRORLEVEL% variável. O PowerShell e outros ambientes de linha de comando também oferecem mecanismos para obter o valor de saída do processo.
-onInitCompleteEvent <eventName>
Permite que um evento seja sinalizado quando a inicialização do rastreamento for concluída.
Exemplos de uso de cenário - gravando um processo
Escolha um cenário que corresponda às suas necessidades:
- Iniciar e gravar – comece com um exemplo simples do Bloco de Notas.
- Iniciar com parâmetros – passe argumentos para seu aplicativo.
- Anexar ao processo em execução – registre um aplicativo já em execução.
- Registrar pais e filhos – capturar cenários de vários processos.
Cenário – Iniciar e gravar um aplicativo do Windows
Nesse cenário, você inicia o Bloco de Notas e cria um registro.
- Use a opção
-launchpara iniciar o Bloco de Notas e registrar o uso.
C:\TTD> TTD.exe -launch notepad.exe
Launching 'notepad.exe'
Recording process (PID:9960) on trace file: C:\TTD\notepad01.run
notepad.exe(x64) (PID:9960): Process exited with exit code 0 after 12984ms
Full trace dumped to C:\TTD\notepad01.run
- Um menu de aplicativo pequeno é exibido, mostrando que o rastreamento está ativado.
- Quando você fecha o aplicativo, ele gera um arquivo de rastreamento. Neste exemplo, o arquivo de rastreamento é denominado notepad01.run.
Cenário – Iniciar e gravar um aplicativo do Windows com um parâmetro passado
Nesse cenário, você inicia o ping e passa o endereço a ser pingado como parâmetro.
- Neste exemplo, você omite a opção
-launchporque ela é o modo padrão.
C:\TTD> TTD.exe ping.exe msn.com
Launching 'ping.exe msn.com'
Recording process (PID:24044) on trace file: C:\TTD\ping01.run
Pinging msn.com [204.79.197.219] with 32 bytes of data:
Reply from 204.79.197.219: bytes=32 time=22ms TTL=118
Reply from 204.79.197.219: bytes=32 time=21ms TTL=118
Reply from 204.79.197.219: bytes=32 time=25ms TTL=118
Reply from 204.79.197.219: bytes=32 time=21ms TTL=118
Ping statistics for 204.79.197.219:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 21ms, Maximum = 25ms, Average = 22ms
ping.exe(x64) (PID:24044): Process exited with exit code 0 after 3390ms
Full trace dumped to C:\TTD\ping01.run
- Quando você fecha o aplicativo, ele gera um arquivo de rastreamento. Neste exemplo, o arquivo de rastreamento é chamado ping01.run.
Cenário - Localizar e anexar a um processo em execução
Nesse cenário, você inicia o Bloco de Notas, encontra sua ID de processo e cria um rastreamento anexando-se ao aplicativo em execução.
Inicie o aplicativo de destino, neste exemplo, Bloco de notas.
Use TaskList ou outros métodos para localizar a ID do processo. Para obter mais informações, consulte Localizando a ID do processo.
C:\TTD> TaskList
...
Notepad.exe 21440 Console 1 73,020 K
...
- Use o ID do processo com a opção
-attachpara anexá-lo e registrá-lo. Opcionalmente, especifique um nome de arquivo para o arquivo de rastreamento com-out.
C:\TTD> TTD.exe -attach 21440 -out C:\TTD\MyTraceFile.run
Attaching to 21440
Recording process (PID:21440) on trace file: C:\TTD\MyTraceFile.run
(x64) (PID:21440): Process exited with exit code 0 after 26672ms
Full trace dumped to C:\TTD\MyTraceFile.run
Cenário – Registrar um processo pai e seus processos filhos
Nesse cenário, você registra um processo pai e seus processos filhos. Como alguns aplicativos usam muitos processos filho, o arquivo de rastreamento da família que contém os filhos pode se tornar bastante grande.
- Especifique a
-childrenopção e o nome do aplicativo pai a ser gravado.
Este exemplo registra a cmd.exe inicialização ping.exe como um processo filho.
ttd.exe -out d:\traces -children cmd.exe /C ping.exe msn.com
Microsoft (R) TTD 1.01.11
Release: 1.11.0.0
Copyright (C) Microsoft Corporation. All rights reserved.
Launching 'cmd.exe /C ping.exe msn.com'
Recording process (PID:48200) on trace file: d:\traces\cmd01.run
Recording process (PID:53724) on trace file: d:\traces\PING01.run
Pinging msn.com [204.79.197.219] with 32 bytes of data:
Reply from 204.79.197.219: bytes=32 time=6ms TTL=117
Reply from 204.79.197.219: bytes=32 time=6ms TTL=117
Reply from 204.79.197.219: bytes=32 time=7ms TTL=117
Reply from 204.79.197.219: bytes=32 time=7ms TTL=117
Ping statistics for 204.79.197.219:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 6ms, Maximum = 7ms, Average = 6ms
(x64) (PID:53724): Process exited with exit code 0 after 3516ms
Trace family nesting level is 1; Parent process ID is 48200
Full trace dumped to d:\traces\PING01.run
...
- Vários arquivos de rastreamento são criados: um para o processo pai e um arquivo de rastreamento para cada processo filho. O WinDbg abre apenas um arquivo de rastreamento por vez, portanto, você precisa executar instâncias separadas do WinDbg para cada rastreamento se quiser depurá-las ao mesmo tempo.
Exemplos de uso de cenários - processos de monitoramento
Cenário - monitoramento de lançamentos de programas e início de gravação
Nesse cenário, use a opção -monitor para registrar todas as instâncias em execução no momento e instâncias futuras de notepad.exe até que o sistema seja reinicializado ou você saia ttd.exe com Ctrl+C. Você precisa da opção -out para monitorar e a pasta de saída já deve existir.
- Monitorar e rastrear as instâncias atuais e futuras de notepad.exe.
C:\TTD> TTD.exe -out C:\TTD\ -monitor notepad.exe
Microsoft (R) TTD 1.01.11
Release: 1.11.121.0
Copyright (C) Microsoft Corporation. All rights reserved.
The Process Launch Monitor driver is not installed
Successfully installed the Process Launch Monitor driver
Recording process Notepad.exe(15904) From parent process explorer.exe(8440)
Recording process (PID:15904) on trace file: C:\TTD\notepad01.run
Recording process Notepad.exe(19920) From parent process explorer.exe(8440)
Recording process (PID:19920) on trace file: C:\TTD\notepad02.run
(x64) (PID:19920): Process exited with exit code 0 after 1281ms
Full trace dumped to C:\TTD\notepad02.run
(x64) (PID:15904): Process exited with exit code 0 after 30719ms
Full trace dumped to C:\TTD\notepad01.run
- Neste exemplo, você carrega duas instâncias de notepad.exe após o início do rastreamento. Ao capturar a atividade de interesse, use CTRL-C no prompt de comando para interromper a gravação.
Cenário - monitoramento de dois programas para lançamentos de programas
Nesse cenário, use a opção -monitor para monitorar e gravar dois aplicativos.
- Monitorar e rastrear as instâncias atuais e futuras de notepad.exe e ping.exe.
C:\TTD> TTD.exe -out C:\TTD\ -monitor notepad.exe -monitor ping.exe
Microsoft (R) TTD 1.01.11
Release: 1.11.121.0
Copyright (C) Microsoft Corporation. All rights reserved.
Successfully uninstalled the Process Launch Monitor driver
Successfully installed the Process Launch Monitor driver
Recording process Notepad.exe(17972) From parent process explorer.exe(8440)
Recording process (PID:17972) on trace file: C:\TTD\Notepad01.run
Tracking process svchost.exe(7824) From parent process services.exe(1292)
Tracking process sppsvc.exe(10376) From parent process services.exe(1292)
Tracking process ClipUp.exe(15108) From parent process svchost.exe(7824)
Tracking process ClipUp.exe(21180) From parent process ClipUp.exe(15108)
Tracking process consent.exe(24280) From parent process svchost.exe(892)
Tracking process ctfmon.exe(24508) From parent process svchost.exe(5064)
Tracking process wt.exe(10768) From parent process explorer.exe(8440)
Tracking process WindowsTerminal.exe(23296) From parent process wt.exe(10768)
Tracking process OpenConsole.exe(6816) From parent process WindowsTerminal.exe(23296)
Tracking process powershell.exe(15956) From parent process WindowsTerminal.exe(23296)
Tracking process git.exe(3656) From parent process powershell.exe(15956)
Tracking process git.exe(1928) From parent process git.exe(3656)
Tracking process git.exe(20312) From parent process powershell.exe(15956)
Tracking process git.exe(5712) From parent process git.exe(20312)
Tracking process csc.exe(16144) From parent process powershell.exe(15956)
Tracking process cvtres.exe(19488) From parent process csc.exe(16144)
Recording process PING.EXE(21468) From parent process powershell.exe(15956)
Recording process (PID:21468) on trace file: C:\TTD\PING01.run
(x64) (PID:21468): Process exited with exit code 1 after 234ms
Full trace dumped to C:\TTD\PING01.run
Tracking process Teams.exe(10060) From parent process Teams.exe(2404)
Tracking process cmd.exe(21796) From parent process powershell.exe(15956)
Recording process PING.EXE(364) From parent process cmd.exe(21796)
Recording process (PID:364) on trace file: C:\TTD\PING02.run
(x64) (PID:364): Process exited with exit code 1 after 234ms
Full trace dumped to C:\TTD\PING02.run
- Neste exemplo, você carrega notepad.exe e ping.exe após o início do rastreamento. Ao capturar a atividade de interesse, use CTRL-C no prompt de comando para interromper a gravação.
Dicas para trabalhar com arquivos de rastreamento
- Ao compartilhar rastreamentos com outras pessoas, compartilhe apenas o arquivo .run. O arquivo de índice (.idx) pode ser tão grande quanto o arquivo .run e é criado automaticamente quando o WinDbg carrega o arquivo de rastreamento.
- Ao colaborar com outras pessoas, compartilhe quaisquer posições de rastreamento relevantes relacionadas ao problema. O colaborador pode usar o comando
!tt x:ypara mover a esse ponto exato no tempo na execução do código. Você pode incluir intervalos de posição de tempo em descrições de bug para acompanhar onde o possível problema ocorre. - Ao relatar um problema com o TTD, se você fornecer o arquivo .run, forneça o arquivo .out também. Essa adição permite a confirmação de que o processo de gravação funcionou corretamente.
- Os arquivos de rastreamento (.run) são bem compactados.
Solução de problemas de gravação de TTD.exe
Erros de arquivo de rastreamento podem ocorrer. Para obter mais informações, consulte Depuração de viagem no tempo – Solução de problemas.
Você pode usar o arquivo .out para solução de problemas. O arquivo de saída de exemplo mostra um rastreamento funcional, terminando com um código de saída zero.
Microsoft (R) TTDRecord 1.01.11
Release: 1.11.47.0
Copyright (C) Microsoft Corporation. All rights reserved.
Initializing Time Travel Debugging for Attach to 9916
Time: 05/08/2023 17:07:15
OS:10.0.25314 EDITION:x64
SessionID: 008F918C-B8A7-4C4E-B91B-34CFC953C501
(TTD::ManageTTDTrace:2725)
Running
(TTD::StartGuestProcess:1512)
Group tracing GUID: B84DF180-DA54-46E5-9019-73690C689979
Running "C:\WINDOWS\SYSTEM32\TTDInject.exe" /duration 1 /InjectMode LoaderForCombinedRecording /ClientParams "37 C:\TTD\Notepad03.run 0 0 0 0 0 0 0 0 c06001 0" /RecordScenario 268435458 /attach 9916 -TraceFileHandle 4f8 -GuestEventHandle 380 -ClientEventHandle 384 -ActiveEventHandle 4f4 -MutexHandle 46c -CommunicationBufferHandle 3c0 -SharedSequenceMutexHandle 3b8 -SharedSequenceBufferHandle 330 /TelemetryFeatureSessionId "008F918C-B8A7-4C4E-B91B-34CFC953C501"
(TTD::StartGuestProcess:1955)
Microsoft (R) TTDInject 1.01.11
Release: 1.11.27.0
Copyright (C) Microsoft Corporation. All rights reserved.
TTDLoader Params:
LauncherDll = TTDLoader
ClientDll = TTDRecordCPU
ClientEntry = InitializeNirvanaClient
ClientParams= 37 C:\TTD\Notepad03.run 0 0 0 0 0 0 0 0 c06001 0
Attach
WaitForMain is off
Allocated processors:55, running threads:2.
Loader TTDLoader.dll injected at 0x00007FFF423B0000 0xc000 -- .reload TTDLoader.dll=0x00007FFF423B0000,0xc000
Injection by thread is complete.
RecordingEngine initialization successful.
RecordVcpu initialization successful.
Loader initialization successful.
Guest Process is x64 binary.
Tracing started at: Tue May 9 00:07:16 2023 (UTC) Mon May 8 17:07:16 2023 (Local)
Guest process exited with exit code 0
Simulation time of '' (x64): 18781ms.
Tracing completed at: Tue May 9 00:07:34 2023 (UTC) Mon May 8 17:07:34 2023 (Local)
A maior parte do conteúdo do arquivo .out é usada internamente pela equipe de depuração de viagem no tempo para solucionar erros de gravação. As informações a seguir podem ser úteis para outras pessoas que estão trabalhando com o arquivo de rastreamento.
- Algumas mensagens de erro são exibidas apenas no arquivo .out e podem ajudá-lo a determinar as especificidades da falha.
- Indicação da hora do relógio de parede que a gravação começou e parou
- Quanto tempo durou a sessão de gravação (tempo de simulação)
- Se a gravação é uma gravação de inicialização (com linha de comando) ou anexar gravação
- A versão do sistema operacional
Conteúdo relacionado
- Introdução: Depuração de Viagem no Tempo – Visão geral – Conheça os conceitos básicos do TTD.
- Gravação com WinDbg: Depuração de Viagem no Tempo – Gravar um rastreamento – Use a interface do usuário do WinDbg para registrar rastreamentos.
- Analisando rastreamentos: Depuração de Viagem no Tempo – Reproduzir um rastreamento – Depure seus rastreamentos gravados no WinDbg.
- Solução de problemas: Depuração de Viagem no Tempo – Solução de problemas – Resolver problemas comuns de gravação.