Time Travel Debugging - TTD.exe Befehlszeilenprogramm
In diesem Artikel wird beschrieben, wann und wie Sie das Befehlszeilenprogramm TTD.exe verwenden, um eine Ablaufverfolgung aufzuzeichnen.
Wann das Befehlszeilenprogramm TTD.exe verwendet werden soll
Mit Time Travel Debugging (TTD) können Sie die Codeausführung einer App oder eines Prozesses aufzeichnen und in einer Ablaufverfolgungsdatei speichern. Die Datei kann im Windows-Debugger wiedergegeben werden, um ein Problem mit der Codeausführung zu finden.
Für viele Szenarien ist die einfachste Möglichkeit, TTD zum Aufzeichnen einer App oder eines Prozesses direkt über die WinDbg-Benutzeroberfläche zu verwenden. Informationen zum Debuggen von Zeitreisen mithilfe der WinDbg-Benutzeroberfläche finden Sie unter Time Travel Debugging – Übersicht.
Möglicherweise haben Sie Szenarien, in denen nur der TTD-Befehlszeilenrekorder erforderlich ist: Aufzeichnung auf einem PC ohne Installation des Debuggers, erweiterte Aufzeichnungsszenarien, Testautomatisierung usw. In diesen Szenarien können Sie nur den TTD-Befehlszeilenrekorder über eine URL installieren.
TTD-Aufzeichnung wirkt sich auf den aufgezeichneten Prozess aus
TTD-Aufzeichnung ist eine invasive Technologie. Je nach Anwendung und ausgewählten Aufzeichnungsoptionen werden Sie überall von 5x bis 20x oder mehr Verlangsamung der ausgeführten App oder des Prozesses bemerken.
Die erstellten Ablaufverfolgungsdateien wachsen im Laufe der Zeit und können erheblichen Speicherplatz belegen. Arbeiten, um die kürzeste Zeit nachzuverfolgen, die Programmaktivität von Interesse zu erfassen und dann die Ablaufverfolgung so schnell wie möglich zu schließen.
Sobald TTD an einen Prozess angefügt ist, kann sie nicht mehr daraus entfernt werden. Schließen Sie die App, oder beenden Sie den Prozess, sobald die TTD-Aufzeichnung abgeschlossen ist. Für systemkritische Prozesse ist ein Neustart des Betriebssystems erforderlich.
TTD-Aufzeichnungen können personenbezogene oder sicherheitsbezogene Informationen enthalten.
TTD-Aufzeichnungen erfassen Speicherinhalte und können personenbezogene oder sicherheitsbezogene Informationen enthalten, einschließlich, aber nicht unbedingt beschränkt auf Dateipfade, Registrierung, Speicher oder Dateiinhalte. Die genauen Informationen hängen von der Zielprozessaktivität ab, während sie aufgezeichnet wurde.
So laden Sie das Befehlszeilenprogramm TTD.exe herunter und installieren es (bevorzugte Methode)
Laden Sie das Befehlszeilenprogramm TTD hier herunter – https://aka.ms/ttd/download
Wählen Sie "Installieren" aus, und TTD wird heruntergeladen und installiert. Der TTD-Befehl wird dem Systempfad hinzugefügt und steht zur Verwendung an der Eingabeaufforderung zur Verfügung, wenn die Installation abgeschlossen ist.
Wenn Bei der Installation Probleme auftreten, lesen Sie die Problembehandlung bei der Installation mit der App Installer-Datei.
Auf einigen PCs müssen Sie möglicherweise die Microsoft App-Installer für Windows 10 installieren. Sie ist in der Microsoft Store-App in Windows verfügbar. Windows-Paket-Manager wird vom App Installer ab Windows 10 1809 unterstützt.
Herunterladen und Installieren des Befehlszeilenprogramms TTD.exe (Offlinemethode)
Während die bevorzugte Installationsmethode die Verwendung des App-Installers ist, können Sie auch das TTD-Befehlszeilenpaket herunterladen und die Dateien manuell extrahieren. Hier sind zwei Möglichkeiten, dies zu tun.
Extrahieren der Dateien aus einem bereits installierten TTD.exe Befehlszeilenprogramm
Wenn Sie das Befehlszeilenprogramm TTD bereits installiert haben, können Sie die Dateien aus dem installierten Speicherort extrahieren. In PowerShell würden Sie dies tun, um den installierten Speicherort zu finden:
(Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation
Von dort aus können Sie alle Binärdateien (*.dll, *.exe, *.sys) an einen neuen Speicherort kopieren. Hier ist eine Möglichkeit, dies in PowerShell zu tun:
robocopy.exe (Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation c:\myttd *.exe *.dll *.sys /E /XD AppxMetadata
Ersetzen Sie "c:\myttd" durch das Ziel Ihrer Wahl. Das Ergebnis sieht ungefähr wie folgt aus (auf einem x64-Computer):
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
Beachten Sie, dass sich die x86-Binärdateien in einem Unterverzeichnis befinden. Wenn Sie keine 32-Bit-Prozesse aufzeichnen müssen, kann dieser Ordner gelöscht werden (und Sie könnten dem Robocopy-Befehl "/xd x86" hinzufügen, um es zuerst zu vermeiden). Die ARM64-Version enthält keine Unterverzeichnisse.
Die TTDRecordUI.dll ist nur erforderlich, wenn Sie die Benutzeroberfläche zum Steuern der Aufzeichnung verwenden möchten. Wenn Sie die Benutzeroberfläche nicht benötigen, können Sie diese Datei löschen.
Laden Sie das TTD.exe Befehlszeilenhilfsprogrammpaket herunter, und extrahieren Sie die Dateien manuell.
Wenn Sie das Befehlszeilenprogramm TTD nicht installieren möchten, können Sie das Paket herunterladen und die Dateien manuell extrahieren. Das folgende PowerShell-Skript wird wie folgt aussehen:
- Rufen Sie die URL für die aktuelle Version von TTD von https://aka.ms/ttd/download.
- Laden Sie das MSIX-Bundle herunter.
- Extrahieren Sie die MSIX-Datei der angeforderten Architektur aus dem MSIX-Bundle.
- Extrahieren Sie die TTD-Binärdateien aus dem 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."
}
Wenn Sie das obige Skript als Get-Ttd.ps1
gespeichert haben, können Sie es wie folgt ausführen, um die x64-Binärdateien in das Verzeichnis "c:\myttd" herunterzuladen:
md c:\myttd
cd c:\myttd
.\Get-Ttd.ps1
Sie können auch das Ausgabeverzeichnis und die Architektur angeben:
.\Get-Ttd.ps1 -OutDir c:\myttd-arm64 -Arch arm64
Ersetzen Sie "c:\myttd" oder "c:\myttd-arm64" durch das Ziel Ihrer Wahl.
Aufzeichnen einer Ablaufverfolgung mithilfe des Befehlszeilenprogramms TTD.exe
Es gibt drei Möglichkeiten, eine Ablaufverfolgung aufzuzeichnen.
- Starten eines Prozesses
- Anfügen an einen Prozess
- Überwachen eines Prozesses
Nachdem der Prozess aufgezeichnet wurde, müssen Sie das Problem auslösen, das Sie debuggen möchten. Sie können eine problematische Datei öffnen oder auf eine bestimmte Schaltfläche in der App klicken, um das Ereignis von Interesse zu verursachen. Wenn die aufgezeichnete Anwendung beendet wird, natürlich oder durch Abstürze, wird die Ablaufverfolgungsdatei abgeschlossen.
Tipp
Für die Aufzeichnung von TTD-Ablaufverfolgungen sind Administratorrechte erforderlich. Dies geschieht in der Regel durch Ausführen von ttd.exe über eine Administrator-Eingabeaufforderung.
Weitere Informationen zum Aufzeichnen einer Zeitreiseablaufverfolgung mit WinDbg finden Sie unter Time Travel Debugging – Aufzeichnen einer Ablaufverfolgung.
Starten eines Prozesses
-launch <Program> [<arguments>]
Starten und Nachverfolgen des Programms (Standardmodus).
Dies ist der einzige Modus, in dem Sie Argumente an das Programm übergeben können. Das Programm wird mit den gleichen Rechten wie TTD.exe (als Administrator) gestartet. Verwenden -attach
oder -monitor
aufzeichnen Sie das Programm mit seinen normalen Berechtigungen.
Das Einschließen -launch
ist optional, kann jedoch zur Übersichtlichkeit verwendet werden.
Das erste nicht erkannte Argument, das nicht beginnt mit - oder / wird als ausführbarer Pfad zum Starten angenommen, und alle nachfolgenden Argumente werden als Argumente für dieses Programm angenommen.
Verwenden Sie TTD.exe notepad.exe
z. B. zum Starten und Aufzeichnen des Editors. Die Ablaufverfolgung wird beendet, wenn Sie den Editor schließen.
Beispiel für die Verwendung finden Sie unter Szenarioverwendungsbeispiele – Aufzeichnen eines Prozesses.
Anfügen an einen Prozess
-attach <PID>
Anfügen an einen ausgeführten Prozess, der durch Prozess-ID angegeben ist. Verwenden Sie TaskManager oder das TaskList-Hilfsprogramm, um Prozessnummern zu identifizieren. Weitere Informationen finden Sie unter Suchen der Prozess-ID.
Verwenden Sie TTD.exe -attach 21440 -out C:\traces\MyTraceFile.run
beispielsweise zum Starten und Aufzeichnen des Prozesses mit und der ID von 21440, und speichern Sie die Ablaufverfolgung in MyTraceFile.run.
Stellen Sie sicher, dass das Verzeichnis vorhanden ist (C:\traces
in diesem Beispiel), bevor Sie TTD.exe ausführen.
Beispiel: Verwendung finden Sie unter "Szenario – Suchen und Anfügen an einen ausgeführten Prozess".
Überwachen eines Prozesses
-monitor <Program>
Mit der Monitoroption kann ein Programm jedes Mal überwacht und nachverfolgt werden, wenn sie gestartet werden. Um diese Option zu verwenden, müssen Sie einen vollständigen Pfad zum Ausgabespeicherort mit -out
.
Drücken Sie STRG+C, um die Überwachung zu beenden.
Die wichtigsten Vorteile der Überwachung im Vergleich zu den anderen Methoden sind:
- Sie können die Ziel-App normal starten, ohne die Befehlszeile zu ermitteln, um sie zu starten.
- Die Ziel-App wird mit ihren normalen Berechtigungen ausgeführt. Wenn Sie die App direkt über ttd.exe starten, wird sie mit erhöhten Rechten gestartet, und dies kann das Verhalten des Programms ändern.
- Es ist nützlich für die Automatisierung (verwenden Sie ein Skript, das den Start eines Programms überwacht und eine Ablaufverfolgung sammelt).
Die Option "-monitor" kann mehrmals angegeben werden, um mehrere Programme zu überwachen.
Beispiel für die Verwendung finden Sie unter Szenarioverwendungsbeispiele – Überwachungsprozesse.
Befehlszeilenoptionen
Syntax
TTD.exe [options] [mode] [program [<arguments>]]
-?
| -help
Zeigen Sie die Befehlszeilenhilfe an.
Modi
-launch <Program> [<arguments>]
Starten und Nachverfolgen des Programms (Standardmodus).
Dies ist der einzige Modus, in dem Sie Argumente an das Programm übergeben können. Die -launch
Option muss die letzte TTD-Option in der Befehlszeile sein, gefolgt von dem Programm zum Starten, und alle Argumente, die das Programm erfordert. Wenn kein Modus angegeben wird, wird er auch als Start behandelt. Beispiel TTD.exe -out C:\traces ping.exe msn.com
: Wird als Start behandelt.
-attach <PID>
Anfügen an einen ausgeführten Prozess, der durch Prozess-ID angegeben ist. Verwenden Sie das Hilfsprogramm TaskManager oder TaskList, um Prozess-IDs zu identifizieren. Weitere Informationen finden Sie unter Suchen der Prozess-ID.
-monitor <Program>
Verfolgen Sie Programme oder Dienste jedes Mal, wenn sie gestartet werden (bis zum Neustart). Um diese Option zu verwenden, müssen Sie einen vollständigen Pfad zum Ausgabespeicherort mit -out
.
Grundlegende Befehlszeilenoptionen
-out <path>
Geben Sie einen Namen der Ablaufverfolgungsdatei oder ein Verzeichnis an. Wenn ein Verzeichnis vorhanden ist, muss das Verzeichnis bereits vorhanden sein. Wenn ein Dateiname vorhanden ist, darf der Dateiname nicht vorhanden sein.
-noUI
Deaktiviert die Benutzeroberfläche für die manuelle Steuerung der Aufzeichnung.
Wenn diese Option nicht ausgewählt ist, wird eine kleine Benutzeroberfläche angezeigt, wenn die Aufzeichnung aktiv ist. "Ablaufverfolgung deaktiviert" beendet die Ablaufverfolgung, und die App wird fortgesetzt; "Exit App" schließt die App, die auch die Ablaufverfolgung beendet.
-accepteula
Verwenden Sie diese Option, um den Lizenzvertrag für endbenutzerbezogene Endbenutzer zu akzeptieren. Diese Option kann in Automatisierungsszenarien verwendet werden, nachdem die EULA überprüft und akzeptiert wurde.
TTD zeigt die EULA beim ersten Ausführen an. Geben Sie "Y" oder "N" ein, um den EULA zu akzeptieren. Nach der Annahme wird das ELA beim Start nicht mehr angezeigt. Wenn die EULA nicht akzeptiert wird, wird TTD beendet, und die EULA wird angezeigt, wenn TTD das nächste Mal ausgeführt wird.
Ablaufverfolgungssteuerelement
-stop <process name> | <PID> | all
Beenden Der Ablaufverfolgung des angegebenen Prozessnamens, piD oder "all" kann angegeben werden.
-wait <timeout>
Warten Sie bis zu der Anzahl von Sekunden, die für alle Ablaufverfolgungssitzungen auf dem System angegeben sind. Geben Sie -1 an, um unendlich zu warten.
-tracingOff
Startet die Anwendung mit deaktivierter Ablaufverfolgungsaufzeichnung. Sie können das Ui-Kontrollkästchen verwenden, um die Ablaufverfolgung wieder zu aktivieren, nachdem sie deaktiviert wurde.
Zusätzliche Befehlszeilenoptionen
-children
Zeichnen Sie das Ziel sowie alle vom Ziel erstellten Prozesse auf. Jeder untergeordnete Prozess wird in einer eigenen Ablaufverfolgungsdatei aufgezeichnet.
-cmdLineFilter "<string>"
Zeichnen Sie das Ziel auf, wenn die Befehlszeile die Zeichenfolge enthält. Diese Option funktioniert nur mit -monitor
dem Modus. Es ist nützlich für Situationen, in denen das Befehlszeilenargument den prozess, an dem Sie interessiert sind, eindeutig identifiziert. Beispielsweise werden Datensätze nur dann notepad.exe, -monitor notepad.exe -cmdLineFilter "specialfile.txt"
wenn specialfile.txt in der Befehlszeile angezeigt wird.
-cleanup
Treiber für die Deinstallation des Prozessmonitors.
Einstellungen für Ablaufverfolgungsverhalten
-timestampFilename
Fügt dem letzten Teil des Dateinamens der Ablaufverfolgung einen Zeitstempel hinzu. Beispiel: ping_2023-06-17_103116.run.
Verwenden Sie beispielsweise diesen Befehl, um ping.exe aufzuzeichnen, wobei ein Zeitstempel im Dateinamen enthalten ist.
ttd.exe -out c:\traces -timestampFilename ping.exe msn.com
Standardmäßig erfolgt eine sequenzielle Überprüfung, um eine nicht verwendete Datei im Ausgabeverzeichnis zu finden. Wenn ping.exe aufgezeichnet wird, versucht der Recorder ping01.run, ping02.run usw. bis ein nicht verwendeter Dateiname gefunden wird. Für die meisten Szenarien reicht diese Benennungsmethode aus. Wenn Sie dasselbe Programm jedoch mehrmals aufzeichnen möchten, kann der Standardmäßige Dateibenennungsalgorithmus ineffizient werden, wenn eine große Anzahl vorhandener Dateien vorhanden ist.
-ring
Ablaufverfolgung auf einen Ringpuffer. Die Dateigröße wird nicht über die von .-maxFile
Nur der letzte Teil der Aufzeichnung, der in die angegebene Größe passt, wird gespeichert.
-maxFile <size>
Maximale Größe der Ablaufverfolgungsdatei in MB. Wenn der Vollständige Ablaufverfolgungsmodus die Standardeinstellung 1024 GB beträgt und der Mindestwert 1 MB beträgt. Wenn im Ringpuffermodus der Standardwert 2048 MB ist, beträgt der Mindestwert 1 MB, und der Maximalwert beträgt 32768 MB.
Der Standardwert für den In-Memory-Ring bei 32-Bit-Prozessen ist 256 MB.
-maxConcurrentRecordings <count>
Maximale Anzahl von Aufzeichnungen, die zu einem beliebigen Zeitpunkt fortgesetzt werden können. Wenn nicht angegeben, kann gleichzeitig eine unbegrenzte Anzahl von Aufzeichnungen erfolgen.
-numVCpu <number>
Gibt eine Reihe von virtuellen CPUs an, die bei der Ablaufverfolgung reserviert und verwendet werden sollen. Dieser Wert wirkt sich auf den Gesamtspeicheraufwand aus, der durch TTD auf den Arbeitsspeicher des Gastprozesses gelegt wird. Wenn nicht angegeben, lautet der Standardwert pro Plattform: 55 für x64/ARM64 und 32 für x86.
Ändern Sie diese Einstellung, um die Speicherauswirkungen nur zu begrenzen, wenn Sie nicht genügend Arbeitsspeicher haben. Das Ändern des NumVCpu-Werts in eine niedrigere Zahl kann die Leistung der Ablaufverfolgung erheblich beeinträchtigen und sollte nur durchgeführt werden, um Speicherauslastungsprobleme zu umgehen.
Wenn TTD.exe die Aufzeichnung nicht aufzeichnen kann oder die OUT-Datei eine Simulation von 0 Sekunden angibt, -numVCpu
kann die Verwendung die Erfolgreiche Aufzeichnung ermöglichen.
-replayCpuSupport <support>
Gibt an, welche Unterstützung von den CPUs erwartet wird, die zum Wiedergeben der Ablaufverfolgung verwendet werden. Die Standardeinstellung wird für die Portabilität von Ablaufverfolgungen zwischen Computern empfohlen, andere Optionen können jedoch verwendet werden, um kleine Ablaufverfolgungsdateien zu erzeugen und schneller aufzuzeichnen (abhängig von den spezifischen Anweisungen, die vom Zielprogramm verwendet werden).
<support>
-Werte
Wert | Beschreibung |
---|---|
Default |
Standardmäßige CPU-Unterstützung erfordert lediglich grundlegende, allgemein verfügbare Unterstützung in der Cpu für die Wiedergabe. |
MostConservative |
Erfordert keine spezielle Unterstützung für die Wiedergabe-CPU. Ausreichend für Ablaufverfolgungen, die auf einer völlig anderen CPU-Architektur wiedergegeben werden, z. B. einer Intel-Ablaufverfolgung auf ARM64 CPU. |
MostAggressive |
Es wird davon ausgegangen, dass die Wiedergabe-CPU ähnlich ist und die gleiche oder größere Funktion aufweist als die cpu, die zum Aufzeichnen verwendet wird. |
IntelAvxRequired |
Es wird davon ausgegangen, dass die Wiedergabe-CPU Intel/AMD 64-Bit-CPU ist, die AVX unterstützt. |
IntelAvx2Required |
Es wird davon ausgegangen, dass die Wiedergabe-CPU Intel/AMD 64-Bit-CPU ist, die AVX2 unterstützt. |
Verringern des Aufwands für die Ablaufverfolgung
Während TTD sehr effizient für die Funktionsweise ist (vollständige Ablaufverfolgung auf Anweisungsebene, die im Durchschnitt in weniger als ein Byte/Anweisung codiert ist), hat sie beim Aufzeichnen immer noch spürbaren Aufwand. Moderne CPUs können Milliarden von Anweisungen pro Sekunde ausführen, was sogar ein Byte/Anweisung teuer macht. In vielen Fällen ist die Aufzeichnung des gesamten Prozesses nicht erforderlich.
Die folgenden Optionen können verwendet werden, um den Aufwand für die Ablaufverfolgung zu verringern:
-module <module name>
Notieren Sie nur das angegebene Modul (z. B. comdlg32.dll) und den code, den sie aufruft. Dies kann die ausführbare Datei selbst oder eine beliebige DLL sein, die von der ausführbaren Datei geladen wird. Diese Option kann mehrmals angegeben werden, um mehrere Module aufzuzeichnen.
Wenn diese Option verwendet wird, wird der Zielprozess mit voller Geschwindigkeit ausgeführt, bis Code in den angegebenen Modulen ausgeführt wird. TTD zeichnet dann den Prozess auf, bis die Ausführung die angegebenen Module verlässt, an welchem Punkt die Aufzeichnung deaktiviert ist und das Ziel zur vollen Geschwindigkeit zurückkehrt. Da das Aktivieren/Deaktivieren der Aufzeichnung teuer ist, lässt TTD die Aufzeichnung bei, wenn ein angegebenes Modul andere Module im Prozess aufruft.
-recordmode <Automatic | Manual>
Normalerweise wird die Aufzeichnung gestartet, sobald TTD sich selbst in den Zielprozess eingibt ("Automatischer" Modus, der Standardwert). Wenn Ihr Programm die IN-Process-Aufzeichnungs-API von TTD verwendet, um zu steuern, wann die Aufzeichnung erfolgt, können Sie den Modus "Manuell" verwenden, um mit voller Geschwindigkeit ausgeführt zu werden, bis Das Programm die API aufruft, um die Aufzeichnung zu starten.
Die Verwendung dieser Optionen kann zu einer erheblichen Verringerung des Aufzeichnungsaufwands und der Ablaufverfolgungsdateigröße führen. Das Debuggen einer mit diesen Optionen aufgezeichneten Ablaufverfolgung unterscheidet sich nicht von einer Ablaufverfolgung des gesamten Prozesses. Wenn Sie einen Ort in der Ablaufverfolgung erreichen, an dem die Aufzeichnung deaktiviert ist, ist die nächste Anweisung in der Ablaufverfolgung die erste Anweisung, die beim Fortsetzen der Aufzeichnung ausgeführt wird.
Ereignisbezogene Einstellungen
-passThroughExit
Übergeben Sie den Beendigungswert des Gastprozesses als Ausgangswert TTD.exe. Dieser Wert steht für Batchdateien über die %ERRORLEVEL%
Variable zur Verfügung. PowerShell und andere Befehlszeilenumgebungen bieten Mechanismen zum Abrufen des Prozessausgangswerts.
-onInitCompleteEvent <eventName>
Ermöglicht das Signal eines Ereignisses, wenn die Ablaufverfolgungsinitialisierung abgeschlossen ist.
Szenarienverwendungsbeispiele – Aufzeichnen eines Prozesses
Szenario – Starten und Aufzeichnen einer Windows-App
In diesem Szenario wird Editor gestartet und eine Ablaufverfolgung erstellt.
- Verwenden Sie die
-launch
Option, um editor zu starten und aufzuzeichnen.
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
- Ein kleines Anwendungsmenü wird angezeigt, das anzeigt, dass die Ablaufverfolgung aktiviert ist.
- Wenn die Anwendung geschlossen wird, wird eine Ablaufverfolgungsdatei generiert. In diesem Beispiel notepad01.run.
Szenario – Starten und Aufzeichnen einer Windows-App mit einem übergebenen Parameter
In diesem Szenario wird Ping gestartet, und die Adresse an Ping wird als Parameter übergeben.
- In diesem Beispiel wird die
-launch
Option weggelassen, da dies der Standardmodus ist.
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
- Wenn die Anwendung geschlossen wird, wird eine Ablaufverfolgungsdatei generiert. In diesem Beispiel ping01.run.
Szenario – Suchen und Anfügen an einen ausgeführten Prozess
In diesem Szenario wird Editor gestartet, seine Prozess-ID befindet sich und eine Ablaufverfolgung wird durch Anfügen an die ausgeführte Anwendung erstellt.
Starten Sie die Ziel-App in diesem Beispielnotizblock.
Verwenden Sie TaskList oder andere methoden, die in beschrieben werden, um die Prozess-ID zu suchen. Weitere Informationen finden Sie unter Suchen der Prozess-ID.
C:\TTD> TaskList
...
Notepad.exe 21440 Console 1 73,020 K
...
- Verwenden Sie diese Prozess-ID, indem Sie die
-attach
Option zum Anfügen und Aufzeichnen verwenden. Geben Sie optional einen Dateinamen für die Ablaufverfolgungsdatei mithilfe von-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
Szenario – Aufzeichnen eines übergeordneten Elements und seiner untergeordneten Prozesse
In diesem Szenario wird ein übergeordnetes Element und seine untergeordneten Prozesse aufgezeichnet. Da einige Apps viele untergeordnete Prozesse verwenden können, kann die Familienablaufverfolgungsdatei, die die untergeordneten Elemente enthält, ziemlich groß werden.
- Geben Sie die
-children
Option und den Namen der zu aufzeichnenden übergeordneten App an.
Dies ist ein Beispiel für die Aufzeichnung cmd.exe starten ping.exe als untergeordneter Prozess.
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
...
- Es werden mehrere Ablaufverfolgungsdateien erstellt: eine für den übergeordneten Prozess und eine Ablaufverfolgungsdatei für jeden untergeordneten Prozess. WinDbg öffnet jeweils nur eine Ablaufverfolgungsdatei, sodass Sie für jede Ablaufverfolgung separate Instanzen von WinDbg ausführen müssen, wenn Sie sie gleichzeitig debuggen möchten.
Szenarienverwendungsbeispiele – Überwachungsprozesse
Szenario – Überwachung für Programmstarts und Start der Aufzeichnung
In diesem Szenario wird die -monitor
Option verwendet, um alle derzeit ausgeführten Instanzen sowie zukünftige Instanzen von notepad.exe aufzuzeichnen, bis das System neu gestartet oder ttd.exe über STRG+C beendet wird. Die -out
Option ist für den Monitor erforderlich, und der Ausgabeordner muss bereits vorhanden sein.
- Überwachen und nachverfolgen Sie die aktuellen sowie zukünftige Instanzen von 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
- In diesem Beispiel wurden zwei Instanzen von notepad.exe geladen, nachdem die Ablaufverfolgung gestartet wurde. Nachdem die interessenbezogene Aktivität erfasst wurde, wurde STRG-C an der Eingabeaufforderung verwendet, um die Aufzeichnung zu beenden.
Szenario : Überwachen von zwei Programmen für Programmstarts
In diesem Szenario wird die -monitor
Option zum Überwachen und Aufzeichnen von zwei Anwendungen verwendet.
- Überwachen und nachverfolgen Sie die aktuellen sowie zukünftige Instanzen von notepad.exe und 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
- In diesem Beispiel notepad.exe und dann wurden ping.exe geladen, nachdem die Ablaufverfolgung gestartet wurde. Nachdem die interessenbezogene Aktivität erfasst wurde, wurde STRG-C an der Eingabeaufforderung verwendet, um die Aufzeichnung zu beenden.
Szenario – Beenden der Aufzeichnung in einem zweiten Fenster
In diesem Szenario wurde die Interessenaktivität erfasst, und alle Aufzeichnungen werden -stop all
beendet. Zum Ausführen der -stop all
Option wird ein zweites Befehlsfenster verwendet.
C:\TTD> TTD.exe -stop all
Microsoft (R) TTD 1.01.11
Release: 1.11.121.0
Copyright (C) Microsoft Corporation. All rights reserved.
Full trace written to 'C:\TTD\Notepad01.run'
Szenario – Bereinigen des Monitortreibers
In diesem Szenario wird die -cleanup
Option zum Bereinigen des Monitortreibers verwendet, nachdem alle Aufzeichnungen abgeschlossen sind.
C:\TTD> TTD.exe -cleanup
The monitor service is not installed
Successfully uninstalled the Process Launch Monitor driver
Weitere Befehlszeilenbeispiele
In dieser Tabelle werden einige zusätzliche Befehlszeilenverwendungsbeispiele erläutert. Weitere Informationen zu den dargestellten Optionen finden Sie in den Befehlszeilenoptionen .
Szenario | Befehl | Beschreibung |
---|---|---|
An den Prozess anfügen, aber die Aufzeichnung noch nicht starten | Ttd.exe -tracingoff notepad.exe |
Startet editor mit deaktivierter Aufzeichnung. Die Aufzeichnung kann jederzeit über die Benutzeroberfläche gestartet werden. |
Filtern nach Befehlszeile | Ttd.exe -cmdlinefilter foo.txt -monitor notepad.exe |
Notieren Sie notepad.exe, aber nur, wenn foo.txt sich beim Start auf der Befehlszeile befindet, und platzieren Sie die Ausgabe im aktuellen Verzeichnis. |
Klingeln | Ttd.exe -ring -attach 1234 |
Zeichnet PID 1234 in einer auf 2 GB begrenzten Ablaufverfolgungsdatei auf und platziert die Ausgabe im aktuellen Verzeichnis. Ältere Inhalte in der Ablaufverfolgungsdatei werden bei Bedarf überschrieben, um die Datei unter der maximalen Größe zu halten. Hier können -maxfile Sie die maximale Größe ändern. |
Beschränken der Dateigröße der Ablaufverfolgung | Ttd.exe -maxfile 4096 notepad.exe |
Notieren Sie notepad.exe, bis die Ablaufverfolgungsdatei 4 GB erreicht, und platzieren Sie die Ausgabe im aktuellen Verzeichnis. |
Begrenzen der Anzahl von Aufzeichnungen, die gleichzeitig auftreten | Ttd.exe -maxconcurrentrecordings 1 -out c:\my\dir -monitor notepad.exe |
Die Aufzeichnung ist CPU-intensiv und in einigen Fällen. |
Verringern der Speicherauslastung im Zielprozess | Ttd.exe -numvcpu 8 -monitor w3wp.exe |
Einige Prozesse, z. B. w3wp.exe, legen ein kleines Kontingent für die Menge an Arbeitsspeicher fest, die sie verwenden kann. Wenn ttd.exe die Aufzeichnung nicht starten kann, können Sie die -numvcpu Anzahl der virtuellen CPUs TTD reduzieren. Probieren Sie diese Option nur aus, wenn ttd.exe nicht auf andere Wege aufzeichnen kann. |
Wählen Sie zwischen Ablaufverfolgungsübertragbarkeit und Aufzeichnungsgeschwindigkeit /Ablaufverfolgungsdateigröße | Ttd.exe -replaycpusupport mostaggressive notepad.exe |
Standardmäßig erzeugt TTD Ablaufverfolgungsdateien, die über eine breite Palette von Hardware portierbar sind. Wenn Sie "mostaggressive" auswählen, wird TTD mitgeteilt, dass es ok ist, eine Ablaufverfolgung aufzuzeichnen, die nur auf CPUs mit den gleichen Funktionen wie der Computer wiedergegeben werden kann, auf dem die Ablaufverfolgung aufgezeichnet wurde. In einigen Fällen kann dies die Geschwindigkeit der Aufzeichnung und die Dateigröße der Ablaufverfolgung erheblich verbessern. |
Beispiele für Automatisierungsbefehle
In dieser Tabelle werden einige zusätzliche Befehlszeilenverwendungsbeispiele erläutert, die für die automatisierte Verwendung von TTD.exe Hilfsprogramm nützlich sein können.
Szenario | Befehl | Beschreibung |
---|---|---|
Benutzeroberfläche deaktivieren | Ttd.exe -noui -accepteula notepad.exe |
Zeichnen Sie notepad.exe auf, und platzieren Sie die Ausgabe im aktuellen Verzeichnis, ohne die Benutzeroberfläche anzuzeigen. |
Warten Sie, bis die Aufzeichnung programmgesteuert gestartet wird. | Ttd.exe -accepteula -oninitcompleteevent ttd_notepad notepad.exe |
Erstellen Sie ein Win32-Benanntes Ereignis "ttd_notepad", und starten Sie notepad.exe. TTD signalisiert "ttd_notepad", wenn die Aufzeichnung initialisiert wird. Die Automatisierung kann auf das Ereignis warten, bevor sie mit dem Verhalten fortfahren, das sie aufzeichnen möchten. |
Beibehalten des Ausgangscodes des Ziels | Ttd.exe -accepteula -passthroughexit ping.exe msn.com |
Zeichnet ping.exe auf und platziert die Ausgabe im aktuellen Verzeichnis. der Exitcode Ttd.exe entspricht dem Exitcode ping.exe. |
Warten, bis die Aufzeichnung beendet ist | Ttd.exe -accepteula -wait 30 |
Nachdem die Aufzeichnung beendet wurde, warten Sie bis zu 30 Sekunden, bis TTD das Schreiben der Ablaufverfolgungsdatei auf den Datenträger abgeschlossen hat. Verwenden Sie -wait -1 , um unbegrenzt zu warten. |
All diese Beispiele verwenden die -accepteula
Option, um sicherzustellen, dass die Automatisierung nicht durch das Bestätigungsdialogfeld der EULA blockiert wird.
Arbeiten mit der generierten Ablaufverfolgungsdatei
Informationen zum Arbeiten mit einer Ablaufverfolgung und Anweisungen zum Wiedergeben von Zeitablaufverfolgungen und zur Rückwärtsnavigation finden Sie unter Time Travel Debugging – Replay a trace.
Tipps zum Arbeiten mit Ablaufverfolgungsdateien
- Beim Freigeben von Ablaufverfolgungen für andere Personen müssen Sie nur die RUN-Datei freigeben. Die Indexdatei (IDX) kann so groß sein wie die RUN-Datei und wird automatisch erstellt, wenn die Ablaufverfolgungsdatei von WinDbg geladen wird.
- Wenn Sie mit anderen zusammenarbeiten, geben Sie alle relevanten Ablaufverfolgungspositionen in Bezug auf das vorliegende Problem weiter. Der Mitarbeiter kann den Befehl
!tt x:y
verwenden, um genau zu diesem Zeitpunkt in der Ausführung des Codes zu gelangen. Zeitliche Positionsbereiche können in Fehlerbeschreibungen aufgenommen werden, um zu verfolgen, wo das mögliche Problem auftritt. - Wenn Sie ein Problem mit TTD melden, geben Sie auch die OUT-Datei an, wenn Sie die RUN-Datei angeben. Dies ermöglicht die Bestätigung, dass der Aufzeichnungsprozess ordnungsgemäß funktioniert hat.
- Ablaufverfolgungsdateien (.run) komprimieren gut.
Problembehandlung bei TTD.exe
Es gibt einige Fälle, in denen Ablaufverfolgungsdateifehler auftreten können. Weitere Informationen finden Sie unter Time Travel Debugging – Problembehandlung.
Die OUT-Datei kann zur Problembehandlung verwendet werden. Die Beispieldatei zeigt eine Funktionale Ablaufverfolgung, die mit einem Exitcode von Null endet.
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)
Der großteil der OUT-Dateiinhalte wird intern vom Time Travel Debugging-Team verwendet, um Fehler zu beheben. Die folgenden Informationen können für andere hilfreich sein, die mit der Ablaufverfolgungsdatei arbeiten.
- Einige Fehlermeldungen werden nur in der OUT-Datei angezeigt und können verwendet werden, um die Besonderheiten des Fehlers zu ermitteln.
- Angabe der Wanduhrzeit, zu der die Aufzeichnung gestartet / beendet wurde
- Dauer der Aufzeichnungssitzung (Simulationszeit)
- Gibt an, ob es sich bei der Aufzeichnung um einen Start (mit Befehlszeile) oder um eine Anfügung einer Aufzeichnung handelt.
- Die Betriebssystemversion
Weitere Informationen
Zeitreise-Debugging – Überblick