Freigeben über


Debuggen von Zeitreisen – TTD.exe Befehlszeilenprogramm

Debugging-Logo für Zeitreisen mit einer Uhr.

In diesem Artikel wird beschrieben, wann und wie Sie das Befehlszeilenprogramm TTD.exe verwenden, um eine Ablaufverfolgung aufzuzeichnen.

Verwendung des Befehlszeilen-Hilfsprogramms TTD.exe

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.

In vielen Szenarien ist die Verwendung von TTD zum Aufzeichnen einer App oder eines Prozesses direkt über die WinDbg-Benutzeroberfläche möglich. Informationen zum Debuggen von Zeitreisen mithilfe der WinDbg-Benutzeroberfläche finden Sie unter Debuggen von Zeitreisen – Übersicht.

Möglicherweise gibt es 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. Sie werden eine beliebige Verlangsamung der ausgeführten App oder des Prozesses während der Aufzeichnung feststellen, je nach Anwendung und ausgewählten Aufnahmeoptionen.

Die erstellten Ablaufverfolgungsdateien wachsen im Laufe der Zeit und können erheblichen Speicherplatz in Anspruch nehmen. Arbeiten Sie für den kürzesten Zeitraum an der Nachverfolgung, erfassen Sie die Programmaktivität von Interesse, und schließen Sie die Ablaufverfolgung so bald wie möglich.

Nachdem TTD an einen Prozess angefügt wurde, kann es nicht mehr aus diesem entfernt werden. Schließen Sie die App, oder beenden Sie den Prozess, nachdem die TTD-Aufzeichnung abgeschlossen ist. Für systemkritische Prozesse ist hierfür ein Neustart des Betriebssystems erforderlich.

TTD-Aufzeichnungen erfassen Speicherinhalte und können persönlich identifizierbare oder sicherheitsbezogene Informationen enthalten, einschließlich, aber nicht notwendigerweise beschränkt auf Dateipfade, Registrierung, Arbeitsspeicher oder Dateiinhalte. Die genauen Informationen hängen von der Zielprozessaktivität ab, während sie aufgezeichnet wurde.

Herunterladen und Installieren des TTD.exe Befehlszeilenhilfsprogramms (bevorzugte Methode)

Laden Sie das TTD-Befehlszeilenprogramm 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 nach Abschluss der Installation an der Eingabeaufforderung zur Verfügung.

Wenn Bei der Installation Probleme auftreten, lesen Sie Behandeln von Installationsproblemen 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 unter Windows verfügbar. Windows-Paket-Manager wird ab Windows 10 1809 über den App-Installer unterstützt.

Herunterladen und Installieren des TTD.exe Befehlszeilenhilfsprogramms (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. Gehen Sie in PowerShell wie folgt vor, 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 in etwa 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önnen dem Robocopy-Befehl /xd x86 hinzufügen, um das Kopieren überhaupt zu vermeiden). Die ARM64-Version verfügt über 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 möchten, können Sie diese Datei löschen.

Laden Sie das TTD.exe Befehlszeilen-Hilfsprogrammpaket herunter, und extrahieren Sie die Dateien manuell.

Wenn Sie das TTD-Befehlszeilenprogramm nicht installieren möchten, können Sie das Paket herunterladen und die Dateien manuell extrahieren. Das folgende PowerShell-Skript führt folgendes aus:

  • Rufen Sie die URL für die aktuelle Version von TTD von ab https://aka.ms/ttd/download.
  • Laden Sie das MSIX-Paket herunter.
  • Extrahieren Sie das MSIX-Paket der angeforderten Architektur aus dem MSIX-Paket.
  • 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.ps1gespeichert 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

Alternativ können Sie 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 Befehlszeilenhilfsprogramms 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 Einen Absturz, wird die Ablaufverfolgungsdatei abgeschlossen.

Tipp

Für das Aufzeichnen von TTD-Ablaufverfolgungen sind Administratorrechte erforderlich. In der Regel erfolgt dies durch Ausführen von ttd.exe über eine Administratoreingabeaufforderung.

Weitere Informationen zum Aufzeichnen einer Zeitreiseablaufverfolgung mit WinDbg finden Sie unter Debuggen von Zeitreisen – 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 Berechtigungen wie TTD.exe (als Administrator) gestartet. Verwenden Sie -attach oder -monitor , um das Programm mit seinem normalen Berechtigungssatz aufzuzeichnen.

Das Einschließen -launch ist optional, kann aber aus Gründen der Übersichtlichkeit verwendet werden.

Das erste nicht erkannte Argument, das nicht mit beginnt, 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 von Editor. Die Ablaufverfolgung wird beendet, wenn Sie 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 die Prozess-ID angegeben wird. Verwenden Sie TaskManager oder das Hilfsprogramm TaskList, um Prozessnummern zu identifizieren. Weitere Informationen finden Sie unter Ermitteln der Prozess-ID.

Verwenden Sie TTD.exe -attach 21440 -out C:\traces\MyTraceFile.run beispielsweise , um den Prozess mit und der ID 21440 zu starten und aufzuzeichnen und die Ablaufverfolgung in MyTraceFile.run zu speichern.

Stellen Sie sicher, dass das Verzeichnis vorhanden ist (C:\traces in diesem Beispiel), bevor Sie TTD.exe ausführen.

Beispiel für die Verwendung finden Sie unter Szenario : Suchen und Anfügen an einen ausgeführten Prozess.

Überwachen eines Prozesses

-monitor <Program>

Mit der Option monitor kann ein Programm bei jedem Start überwacht und nachverfolgt werden. Um diese Option zu verwenden, müssen Sie mit -outeinen vollständigen Pfad zum Ausgabespeicherort angeben.

Drücken Sie STRG+C, um die Überwachung zu beenden.

Die Standard Vorteile der Überwachung im Vergleich zu den anderen Methoden sind:

  • Sie können die Ziel-App auf normale Weise 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 aus ttd.exe wird sie mit erhöhten Rechten gestartet, was das Verhalten des Programms ändern kann.
  • 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

Zeigt die Befehlszeilenhilfe an.

Modi

-launch <Program> [<arguments>]

Starten und nachverfolgen Sie das Programm (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 allen Argumenten, die das Programm benötigt. Wenn kein Modus angegeben ist, wird er auch als Start behandelt. Beispielsweise TTD.exe -out C:\traces ping.exe msn.com wird als Start behandelt.

-attach <PID>

Anfügen an einen ausgeführten Prozess, der durch die Prozess-ID angegeben wird. Verwenden Sie taskManager oder das TaskList-Hilfsprogramm, um Prozess-IDs zu identifizieren. Weitere Informationen finden Sie unter Suchen der Prozess-ID.

-monitor <Program>

Verfolgen Sie Programme oder Dienste jedes Mal nach, wenn sie gestartet werden (bis zum Neustart). Um diese Option zu verwenden, müssen Sie einen vollständigen Pfad zum Ausgabespeicherort mit -outangeben.

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. "App beenden" schließt die App, wodurch auch die Ablaufverfolgung beendet wird.

Screenshot der TTD-Benutzeroberfläche mit kleinen zwei Schaltflächen, auf der die Ablaufverfolgung status und eine Schaltfläche

-accepteula

Verwenden Sie diese Option, um die EuLA-Benutzerlizenzvereinbarung zu akzeptieren. Diese Option kann in Automatisierungsszenarien verwendet werden, nachdem der EULA überprüft und akzeptiert wurde.

TTD zeigt den EULA bei der ersten Ausführung an. Geben Sie Y oder N ein, um die EULA zu akzeptieren. Nach der Annahme wird die ELA beim Start nicht mehr angezeigt. Wenn der EULA nicht akzeptiert wird, wird TTD beendet und der EULA angezeigt, wenn TTD das nächste Mal ausgeführt wird.

Ablaufverfolgungssteuerung

-stop <process name> | <PID> | all

Beenden der Ablaufverfolgung des angegebenen Prozessnamens, piD oder "all" kann angegeben werden.

-wait <timeout>

Warten Sie bis zu der angegebenen Anzahl von Sekunden, bis alle Ablaufverfolgungssitzungen auf dem System enden. Geben Sie -1 an, um unendlich zu warten.

-tracingOff

Startet die Anwendung mit ausgeschalteter Ablaufverfolgungsaufzeichnung. Sie können das Kontrollkästchen der Benutzeroberfläche verwenden, um die Ablaufverfolgung wieder einzuschalten, 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>"

Notieren Sie das Ziel, wenn seine Befehlszeile die Zeichenfolge enthält. Diese Option funktioniert nur mit dem -monitor Modus. Dies ist nützlich für Situationen, in denen das Befehlszeilenargument den prozess eindeutig identifiziert, an dem Sie interessiert sind. Datensätze notepad.exe beispielsweise nur dann, -monitor notepad.exe -cmdLineFilter "specialfile.txt" wenn specialfile.txt in der Befehlszeile angezeigt wird.

-cleanup

Deinstallieren Sie den Prozessmonitortreiber.

Ablaufverfolgungsverhaltenseinstellungen

-timestampFilename

Fügt dem letzten Teil des Namen der Ablaufverfolgungsdatei 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 wird eine sequenzielle Überprüfung durchgeführt, um eine nicht verwendete Datei im Ausgabeverzeichnis zu finden. Wenn ping.exe aufgezeichnet wird, versucht der Rekorder ping01.run, ping02.run usw. bis ein nicht verwendeter Dateiname gefunden wird. Für die meisten Szenarien ist diese Benennungsmethode ausreichend. Wenn Sie jedoch dasselbe Programm mehrmals aufzeichnen möchten, kann der Standard-Dateibenennungsalgorithmus ineffizient werden, wenn eine große Anzahl vorhandener Dateien vorhanden ist.

-ring

Ablaufverfolgung zu einem Ringpuffer. Die Dateigröße wird nicht über die von -maxFileangegebenen Grenzwerten hinaus zunehmen. Nur der letzte Teil der Aufzeichnung, der in die angegebene Größe passt, wird gespeichert.

-maxFile <size>

Maximale Größe der Ablaufverfolgungsdatei in MB. Im vollständigen Ablaufverfolgungsmodus ist der Standardwert 1024 GB und der Mindestwert ist 1 MB. Im Ringpuffermodus ist der Standardwert 2048 MB, der Mindestwert 1 MB und der Maximalwert 32768 MB.

Der Standardwert für den In-Memory-Ring in 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 eine unbegrenzte Anzahl von Aufzeichnungen gleichzeitig erfolgen.

-numVCpu <number>

Gibt eine Anzahl von virtuellen CPUs an, die reserviert und bei der Ablaufverfolgung verwendet werden sollen. Dieser Wert wirkt sich auf den gesamten Arbeitsspeicheraufwand aus, der durch TTD im Arbeitsspeicher des Gastprozesses verursacht wird. Wenn nicht angegeben, lautet die Standardeinstellung pro Plattform: 55 für x64/ARM64 und 32 für x86.

Ändern Sie diese Einstellung, um die Auswirkungen auf den Arbeitsspeicher nur dann zu begrenzen, wenn Ihnen der Arbeitsspeicher knapp wird. Das Ändern des numVCpu-Werts in eine niedrigere Zahl kann die Leistung der Ablaufverfolgung stark beeinträchtigen und sollte nur durchgeführt werden, um Probleme mit der Speicherauslastung zu umgehen.

Wenn TTD.exe nicht aufgezeichnet werden kann oder die OUT-Datei eine Simulation von 0 Sekunden anzeigt, kann die Aufzeichnung -numVCpu erfolgreich sein.

-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, aber es können andere Optionen verwendet werden, um kleine Ablaufverfolgungsdateien zu erstellen 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 eine einfache, allgemein verfügbare Unterstützung in der Wiedergabe-CPU.
MostConservative Erfordert keine spezielle Unterstützung in der Wiedergabe-CPU. Geeignet 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 und gleich oder größer ist als die CPU, die zum Aufzeichnen verwendet wird.
IntelAvxRequired Geht davon aus, dass die Wiedergabe-CPU eine Intel/AMD 64-Bit-CPU ist, die AVX unterstützt.
IntelAvx2Required Geht davon aus, dass die Wiedergabe-CPU eine Intel/AMD 64-Bit-CPU ist, die AVX2 unterstützt.

Reduzieren des Aufwands für die Ablaufverfolgung

Während TTD für das, was es tut, sehr effizient ist (vollständige Ablaufverfolgung auf Anweisungsebene, die im Durchschnitt in weniger als ein Byte/Anweisung codiert ist), hat es immer noch einen spürbaren Mehraufwand bei der Aufzeichnung. 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 reduzieren:

-module <module name>

Zeichnen Sie nur das angegebene Modul (z. B. comdlg32.dll) und den code auf, den es 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 den Prozess dann auf, bis die Ausführung die angegebenen Module verlässt, an dem 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 an, wenn ein angegebenes Modul andere Module im Prozess aufruft.

-recordmode <Automatic | Manual>

Normalerweise beginnt die Aufzeichnung, sobald TTD sich in den Zielprozess einschleust ("Automatisch"-Modus, Standard). 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 auszuführen, bis Ihr Programm die API aufruft, um die Aufzeichnung zu starten.

Die Verwendung dieser Optionen kann zu einer erheblichen Verringerung des Aufzeichnungsaufwands und der Größe der Ablaufverfolgungsdatei führen. Das Debuggen einer Ablaufverfolgung, die mit diesen Optionen aufgezeichnet wurde, 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.

-passThroughExit

Übergeben Sie den Ausstiegswert des Gastprozesses als TTD.exe-Exitwert. Dieser Wert ist für Batchdateien über die %ERRORLEVEL% Variable verfügbar. PowerShell und andere Befehlszeilenumgebungen bieten auch Mechanismen zum Abrufen des Prozessausstiegswerts.

-onInitCompleteEvent <eventName>

Ermöglicht die Signalisierung eines Ereignisses, wenn die Ablaufverfolgungsinitialisierung abgeschlossen ist.

Szenarioverwendungsbeispiele: Aufzeichnen eines Prozesses

Szenario: Starten und Aufzeichnen einer Windows-App

In diesem Szenario wird der Editor gestartet, und eine Ablaufverfolgung wird erstellt.

  1. 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
  1. Es wird ein kleines Anwendungsmenü angezeigt, in dem angezeigt wird, dass die Ablaufverfolgung aktiviert ist.

Screenshot der TTD-Benutzeroberfläche mit Ablaufverfolgungs-status und einer Schaltfläche

  1. 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 der Ping gestartet, und die Adresse an den Ping wird als Parameter übergeben.

  1. 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
  1. 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 der Editor gestartet, die Prozess-ID befindet sich, und eine Ablaufverfolgung wird erstellt, indem an die ausgeführte Anwendung angefügt wird.

  1. Starten Sie die Ziel-App in diesem Beispiel-Editor.

  2. Verwenden Sie TaskList oder andere in beschriebene Methoden, um die Prozess-ID zu ermitteln. Weitere Informationen finden Sie unter Ermitteln der Prozess-ID.

C:\TTD> TaskList
...
Notepad.exe                  21440 Console                    1     73,020 K
...
  1. Verwenden Sie diese Prozess-ID, um sie -attach anzufügen und aufzuzeichnen. Geben Sie optional mithilfe von einen Dateinamen für die Ablaufverfolgungsdatei -outan.
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 und seiner untergeordneten Prozesse

In diesem Szenario werden ein übergeordneter und dessen untergeordnete Prozesse aufgezeichnet. Da einige Apps möglicherweise viele untergeordnete Prozesse verwenden, kann die Familienablaufverfolgungsdatei, die die Kinder enthält, ziemlich groß werden.

  1. Geben Sie die -children Option und den Namen der aufzuzeichnenden übergeordneten App an.

Dies ist ein Beispiel für das Aufzeichnen 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

...

  1. 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 separate WinDbg-Instanzen für jede Ablaufverfolgung ausführen müssen, wenn Sie sie gleichzeitig debuggen möchten.

Szenarioverwendungsbeispiele – Überwachungsprozesse

Szenario: Überwachung von Programmstarts und Starten 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 wird oder ttd.exe über STRG+C beendet wird. Die -out Option ist für den Monitor erforderlich, und der Ausgabeordner muss bereits vorhanden sein.

  1. Überwachen und Nachverfolgen der aktuellen sowie aller zukünftigen 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

  1. In diesem Beispiel wurden zwei Instanzen von notepad.exe geladen, nachdem die Ablaufverfolgung gestartet wurde. Nachdem die aktivität von Interesse 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 verwendet, um zwei Anwendungen zu überwachen und aufzuzeichnen.

  1. Überwachen und nachverfolgen Sie die aktuellen sowie alle zukünftigen 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
  1. In diesem Beispiel wurden notepad.exe und dann ping.exe geladen, nachdem die Ablaufverfolgung gestartet wurde. Nachdem die aktivität von Interesse 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 aktivität von Interesse erfasst, und die gesamte Aufzeichnung wird mit -stop allbeendet. Ein zweites Befehlsfenster wird verwendet, um die -stop all Option auszuführen.

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 verwendet, um den Monitortreiber nach Abschluss aller Aufzeichnungen sauber.

C:\TTD> TTD.exe -cleanup
The monitor service is not installed
Successfully uninstalled the Process Launch Monitor driver

Zusätzliche Befehlszeilenbeispiele

In dieser Tabelle werden einige zusätzliche Befehlszeilennutzungsbeispiele aufgeführt. Weitere Informationen zu den dargestellten Optionen finden Sie unter Befehlszeilenoptionen .

Szenario Get-Help BESCHREIBUNG
An den Prozess anfügen, aber die Aufzeichnung noch nicht starten Ttd.exe -tracingoff notepad.exe Startet den 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 Zeichnen Sie notepad.exe jedoch nur auf, wenn sich foo.txt beim Starten in der Befehlszeile befindet und die Ausgabe im aktuellen Verzeichnis platziert wird.
Ringaufzeichnung 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.

Verwenden Sie -maxfile , um die maximale Größe zu ändern.
Beschränken der Größe der Ablaufverfolgungsdatei Ttd.exe -maxfile 4096 notepad.exe Zeichnen Sie notepad.exe auf, bis die Ablaufverfolgungsdatei 4 GB erreicht, und platzieren Sie die Ausgabe im aktuellen Verzeichnis.
Begrenzen der Anzahl von Aufzeichnungen, die gleichzeitig erfolgen Ttd.exe -maxconcurrentrecordings 1 -out c:\my\dir -monitor notepad.exe Die Aufzeichnung ist CPU-intensiv und in einigen Fällen.
Reduzieren 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, verwenden Sie -numvcpu , um die Anzahl der TTD-Zuordnungen virtueller CPUs zu reduzieren. Versuchen Sie diese Option nur, wenn ttd.exe nicht auf andere Wege aufzeichnen kann.
Wählen Sie zwischen Ablaufverfolgungsportabilität und Aufzeichnungsgeschwindigkeit/Größe der Ablaufverfolgungsdatei Ttd.exe -replaycpusupport mostaggressive notepad.exe Standardmäßig erzeugt TTD Ablaufverfolgungsdateien, die über eine Vielzahl von Hardware hinweg portierbar sind. Wenn Sie "mostaggressive" auswählen, wird TTD mitgeteilt, dass es in Ordnung ist, eine Ablaufverfolgung aufzuzeichnen, die nur auf CPUs mit den gleichen Funktionen wie der Computer wiedergegeben werden kann, der die Ablaufverfolgung aufgezeichnet hat. In einigen Fällen kann dies die Aufzeichnungsgeschwindigkeit und die Größe der Ablaufverfolgungsdatei erheblich verbessern.

Beispiele für die Automatisierungsbefehlszeile

In dieser Tabelle werden einige zusätzliche Befehlszeilennutzungsbeispiele aufgeführt, die für die automatisierte Verwendung des Hilfsprogramms TTD.exe nützlich sein können.

Szenario Get-Help BESCHREIBUNG
Deaktivieren der Benutzeroberfläche 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öchte.
Beibehalten des Exitcodes des Ziels Ttd.exe -accepteula -passthroughexit ping.exe msn.com Zeichnet ping.exe auf, wobei die Ausgabe im aktuellen Verzeichnis platziert wird. der Exitcode von Ttd.exe entspricht dem Exitcode von ping.exe.
Warten, bis die Aufzeichnung beendet ist Ttd.exe -accepteula -wait 30 Warten Sie nach dem Beenden der Aufzeichnung bis zu 30 Sekunden, bis TTD das Schreiben der Ablaufverfolgungsdatei auf den Datenträger abgeschlossen hat. Verwenden Sie -wait -1 , um unbegrenzt zu warten.

In allen diesen Beispielen wird die -accepteula Option verwendet, um sicherzustellen, dass die Automatisierung nicht durch das Bestätigungsdialogfeld für die Lizenzvereinbarung blockiert wird.

Arbeiten mit der generierten Ablaufverfolgungsdatei

Informationen zum Arbeiten mit einer Ablaufverfolgung und Anweisungen zum Wiedergeben von Zeitreiseablaufverfolgungen und zum Vorwärts- und Rückwärts navigieren in der Zeit finden Sie unter Debuggen von Zeitreisen – Wiedergeben einer Ablaufverfolgung.

Tipps zum Arbeiten mit Ablaufverfolgungsdateien

  • Wenn Sie Ablaufverfolgungen für andere freigeben, 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, übergeben Sie alle relevanten Ablaufverfolgungspositionen im Zusammenhang mit dem jeweiligen Problem. Der Projektmitarbeiter kann den !tt x:y Befehl verwenden, um bei der Ausführung des Codes zu dem genauen Zeitpunkt zu wechseln. Zeitpositionsbereiche können in Fehlerbeschreibungen aufgenommen werden, um nachzuverfolgen, 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) werden gut komprimiert.

Problembehandlung bei TTD.exe

Es gibt einige Fälle, in denen Fehler bei der Ablaufverfolgungsdatei auftreten können. Weitere Informationen finden Sie unter Debuggen von Zeitreisen – Problembehandlung.

Die OUT-Datei kann für die Problembehandlung verwendet werden. Die Beispieldatei zeigt eine Funktionsablaufverfolgung, die mit einem Exitcode von 0 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)

Die meisten Inhalte der .out-Datei werden intern vom Debugteam für Zeitreisen verwendet, um Aufzeichnungsfehler zu beheben. Die folgenden Informationen können für andere Benutzer 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.
  • Anzeige 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 das Anfügen der Aufzeichnung handelt.
  • Die Betriebssystemversion

Weitere Informationen

Debuggen von Zeitreisen – Übersicht

Debuggen von Zeitreisen– Aufzeichnen einer Ablaufverfolgung

Debuggen von Zeitreisen – Wiedergeben einer Ablaufverfolgung