Freigeben über


Versionshinweise zum Time Travel Debugging

Zeitreise-Debugging-Logo mit einer Uhr.

Dieses Thema enthält Informationen zu den Neuerungen im Time Travel Debugging.

1.11.553

!tt ohne Argumente zeigt jetzt kurze Hilfetexte und die aktuelle Position an (statt zum Anfang der Ablaufverfolgung zu wechseln).

Mit einer neuen Datenmodellmethode können Sie den Verlauf der Werte einer lokalen Variablen anzeigen. Innerhalb eines Frame-Objekts, z. B. @$curframe für den aktuellen Frame, können Sie verwenden. TTD. VariableHistory() zum Abrufen eines Protokolls der Werte, die in eine Variable geschrieben wurden, und des Bereichs der Positionen, an denen die Variable diesen Wert gehalten hat.

  • dx -g @$curframe.TTD.VariableHistory().Variables zeigt die Liste der lokalen Variablennamen an.
  • dx -g @$curframe.TTD.VariableHistory().Variables[n].Values zeigt den Verlauf für die lokale Variable #n an.

Die TTD Replay-API ist auch in einem experimentellen SDK verfügbar. Diese API ist die gleiche, die der Debugger für die Interaktion mit TTD verwendet, und sie ermöglicht es, mit .Calls() / .Memory() effizient Daten zu sammeln. Weitere Informationen finden Sie unter https://aka.ms/ttdsdk.

Korrigiert

  • Beheben des Absturzes aufgrund des Veraltets von ErrorReporting::PrintError (1.11.553)

1.11.532

Diese Version ist ein Wartungs-Release, das die Robustheit der Aufnahmefunktionen verbessert. Diese TTD-Version fällt mit der Version vom Juni 2025 von Windbg zusammen. Eine neue Funktion ist, dass das Datenmodell-Objekt Position jetzt Prozente in das Tracing liefert.

Geändert

  • Sonstige Infrastrukturwartung.
  • Verwenden Sie die ISO-Standardimplementierung von C++ volatile. (1.11.518)
  • Fügen Sie Prozent zur Projektion des Datenmodells Position hinzu. (1.11.514)

Korrigiert

  • Erhöhen Sie die Robustheit der TTD-Handhabung von decodierten Anweisungen. (1.11.530)
  • Entfernen Sie die Verwendung von XSAVE im Emulator, und optimieren Sie die interne Registerübertragung. (1.11.509)

1.11.506

Diese Version war eine kleine Veröffentlichung, um mit der Ausgabe von WinDbg im April 2025 zusammenzufallen.

Geändert

  • Durch Klicken auf eine TTD-Position im Datenmodell (z. B. in der Modulliste) wird zu dieser Position in der Ablaufverfolgung navigiert. (1.11.492)

    Hinweis: Das Befehlsfenster zeigt die aktualisierte TTD-Position erst an, wenn der nächste Schritt oder der Nächste Befehl ausgeführt wird.

Korrigiert

  • Fügen Sie den Prozessnamen zur .out-Datei hinzu, wenn Sie einer PID zuordnen, um die Fehlerbehebung zu erleichtern. (1.11.486)

1.11.481

Wir haben den !tt-Befehl überarbeitet, um Ihnen effizientere Navigationsmöglichkeiten durch Ihre Prozessablaufverfolgung zu bieten.

  • Anteilige Prozentsätze können verwendet werden, um den Suchbereich (!tt 23,65) einzugrenzen.
  • Suchen Sie nach dem vorherigen oder nächsten Zeitpunkt, an dem sich ein Registerwert ändert (!tt br ebx)
  • Ermittlung des vorherigen/nächsten Zugriffs auf einen Speicherbereich (!tt ba- [addr] [range])
  • Finden Sie das vorherige/nächste Mal, wenn die Ausführung in ein anderes Modul wechselt (!tt bm)
  • Finden Sie den vorherigen/nächsten Zeitpunkt der Ausführung für ein bestimmtes Modul (!tt bm ntdll)

Weitere Informationen finden Sie unter !tt (Zeitreise).

Einige wichtige Fixes:

  • Fehlermeldungen wie "64-Bit-Wert verliert beim Konvertieren in eine Zahl an Genauigkeit" beim Verwenden von @$cursession.TTD.Data.Heap() bei einer 32-Bit-Ablaufverfolgung sind verschwunden.
  • Das Parsen von Hilfeoptionen (-?, -help) wird jetzt an jeder Stelle der Befehlszeile korrekt erkannt.
  • dx @$cursession.TTD.Calls() Es ist nicht mehr erforderlich, dass Adressen mit dem Anfang einer Funktion übereinstimmen. Stattdessen wird die Adresse dem Anfang der nächstgelegenen Abgleichsfunktion zugeordnet.
  • TTD gibt die Zielversion des Betriebssystems über den Vertarget-Befehl richtig an.
  • Die Verwendung von "-monitor" mit dem Namen eines gehosteten Diensts zeichnet keine nicht verknüpften gehosteten Dienste mehr auf.

Hinzugefügt

  • Haltepunkte für Registeränderungen in TTD-Ablaufverfolgungen (1.11.431)

Geändert

  • Korrektur der Aufzeichnung von Diensten nach Namen im Monitormodus (1.11.477)
  • Erfassen der Betriebssysteminformationen des tatsächlichen Zielsystems für die Verwendung durch Debugger (1.11.473)
  • Behebung der Übertragung von XMM-Registern zwischen dem Emulator und CONTEXT (1.11.469)
  • Abfragen gegen Adressen innerhalb einer Funktion erlauben (1.11.459)
  • Support für Symbole als Adressen/Größen in !tt Kommandozeile (1.11.454)
  • Verbessern der Konsistenz und Erweitern der Funktionen von TTD-Navigationsbefehlen (1.11.453)
  • Verbesserung der Konsistenz der Modul-DB bei beschädigten Daten (1.11.430)

Korrigiert

  • Prozessname zur Ausgabe hinzufügen, wenn an PID angehängt (1.11.486)
  • TTD. Data.Heap() meldet "Fehler: 64-Bit-Wert verliert genauigkeit bei der Konvertierung in Zahl" in einigen Fällen (1.11.471)
  • Verbessern der Zuverlässigkeit der Aufzeichnung eines Prozesses mit aktivierten Schattenstapeln (1.11.466)
  • Hinzufügen der Modulnavigation über !tt bm und Datenmodell (1.11.462)
  • Beheben Sie einige Probleme mit der Befehlszeilenanalyse. (1.11.444)
  • Lodsd reparieren, Doppelwort an Adresse laden (oberen Teil von rax auf Null setzen) (1.11.434)
  • Beheben einiger Libfuzzerfehler (1.11.433)

1.11.429

Dieses TTD-Update enthält einige Fehlerkorrekturen sowie einige interne Änderungen zur Verbesserung der Zuverlässigkeit.

Hinweis: 1.11.410 führte eine Regression in der Emulation der Intel/AMD LODSD-Anweisung ein. Ein Fix für diese Regression wird in der nächsten Version angezeigt.

Fehlerbehebungen:

  • Verbessern der Zuverlässigkeit des Lesens von Paketen und andere Änderungen zur Optimierung der Zuverlässigkeit.
  • Korrektur einer Regression bei der Emulation der AVX VBROADCAST[I/F]128-Anweisung.
  • Korrektur des Zugriffs von Ausnahmedatensätzen auf ARM64 in neueren Builds von Windows.

1.11.410

Verbesserte Barrierefreiheit: Die Benutzeroberfläche „Status“ skaliert nun wie vorgesehen mit den Änderungen der Textgröße.

Der @$cursession.TTD.Calls()-Befehl im Debugger unterstützt jetzt Platzhalter, die einer großen Anzahl von Funktionen entsprechen. Es ist jetzt möglich, eine große Anzahl von Funktionen (@$cursession.TTD.Calls("kernel32!*")) abzufragen.

Automatisierung: Eine neue -onMonitorReadyEvent Befehlszeilenoption gibt an, wann der Aufzeichnungsbildschirm (-monitor-Schalter) bereit ist, neue Prozesse aufzuzeichnen.

Fehlerbehebungen:

  • Festlegen einiger Racebedingungen während der Initialisierung des Rekorders.
  • Festlegen, wie Systemaufrufe aufgezeichnet werden, damit Haltepunkte ordnungsgemäß funktionieren.
  • Beheben mehrerer Probleme mit dem Modul „Selektives Aufzeichnen“.

Beheben von Problemen mit ARM64:

  • Es wurde ein Problem behoben, durch das die TTD-Aufzeichnung auf einfachen CPUs auf ARM64v8.0-Ebene verhindert wurde.
  • Verbesserte Nachrichtenübermittlung beim Versuch, auf ARM64 eine Ablaufverfolgung eines x86- oder x64-Prozesses zu verwenden.

Beheben von Problemen mit AMD/Intel (einschließlich einiger von Google gemeldeter Probleme):

  • Falsche Emulation von LODS wurde behoben: Anstatt die nicht verwendeten Bits von RAX zu nullen, werden sie jetzt ordnungsgemäß beibehalten.
  • Feste Emulation der "Pop ax"-Anweisung in x86/x64-Prozessen, die fälschlicherweise die oberen Bits des vollständigen Registers nullten (z. B. "Pop ax" hat die oberen Bits von rax gelöscht).
  • Direkte Emulation der XGETBV-Anweisung (schneller).
  • Direkte Emulation aller AVX512 SIMD-Verschiebungen (schneller).

1.11.316

Beheben einer Regression, die gelegentlich Abstürze verursachte, wenn Programme mit langen unterbrechungsfreien datenintensiven Anweisungssequenzen aufgezeichnet wurden.

Beheben von Problemen mit ARM64:

  • Die Aufzeichnung in ARM64-Prozessen mit aktivierter PAC-Funktion wird nun unterstützt.
  • Es wurde ein Problem mit ANDS- und TST-Anweisungen behoben, die die Carry- und Overflow-Flags nicht gelöscht haben.

Behebung von AMD-/Intel-Fehlern:

  • Es wurde ein Problem behoben, das dazu geführt hat, dass TTD „xchg r8,rax"“und „xchg r8w,ax“ nicht richtig als NOP emuliert hat.

1.11.304

TTD implementiert und veröffentlicht nun öffentlich eine API, um den Recorder aus dem live aufgezeichneten Prozess zu steuern. Eine Dokumentation und ein Beispiel finden Sie in GitHub.

TTD kann sich jetzt mit dem neuen -recordMode Schalter selbst einfügen, wenn die Aufzeichnung deaktiviert ist. TtD verwendet -recordMode Automaticstandardmäßig , was bewirkt, dass alle Threads aufgezeichnet werden. Wenn -recordMode Manual angegeben ist, injiziert TTD in den Zielprozess, zeichnet jedoch erst etwas auf, wenn dies durch einen API-Aufruf veranlasst wird.

Die Aufzeichnung kann nun auf einen bestimmten Satz von Modulen mit dem -module Schalter beschränkt werden. In einigen Szenarien kann diese Einschränkung zu erheblich schnelleren Aufzeichnungen und kleineren Ablaufverfolgungsdateien führen. Es können mehrere -module Schalter angegeben werden.

Übereinstimmende Datensatz- und Wiedergabekomponenten sind jetzt in der Verteilung enthalten. Im Falle einer Inkompatibilität zwischen dem Debugger und dem Befehlszeilenrekorder oder einem Wiedergabefehler können die Wiedergabekomponenten als Problemumgehung in die Debugger-Installation kopiert werden, bis ein neuer Debugger veröffentlicht wird.

Der installierte Dateispeicherort kann in PowerShell gefunden werden, indem Sie den folgenden Befehl ausführen:

ls (Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation

Hinzugefügt

  • Schalter „-recordmode“ hinzufügen, um die Injektion ohne automatische Aufzeichnung zu ermöglichen (1.11.296)
  • Add-Module-Schalter und Verwendung zum Erstellen einer SR-Konfiguration (1.11.291)
  • Benutzerdefinierte Project-Daten, die von der In-Process-API für das Datenmodell aufgezeichnet werden (1.11.286)
  • Fügen Sie eine neue TTDLiveRecorder.dll hinzu und verbinden Sie sie zusammen mit TTDRecordCPU.dll (1.11.283)
  • Hinzufügen von Wiedergabekomponenten zu MSIX & Fix SDK-Nachschlagevorgang (1.11.265)

Geändert

none

Korrigiert

  • Umgehen eines Fehlers im nlohmann JSON Serializer, der in einigen internen Tools verwendet wird (1.11.281)
  • Anpassen der Zeichenfolgenausrichtung, um einen seltenen CRT-Fehler zu vermeiden (1.11.279)
    • Gemeldet und behoben in den VS- und Betriebssystem-Codebasen.
  • Mehrere kleine Fixes aus Watson-Absturzberichten (1.11.276)
  • Beheben einer Regression, die in einigen Fällen zu Beschädigungen der Ablaufverfolgungsdatei führen kann (1.11.264)

Bekannte Probleme

  • Auf ARM64 scheitert der Compiler daran, mehrere Hochfrequenzfunktionen als Tail-Calls aufzurufen, was in extremen Fällen dazu führen kann, dass der Recorder keinen Stack-Speicher mehr hat und abstürzt.

1.11.261

Wichtige Änderungen in dieser Version umfassen:

  • ARM64] Das Verhalten der Anweisungen SXTL, SQXTN2, SQXTUN2, UQXTN2, XTN2 und TRN1 wurde behoben, wenn das Zielregister als Quelle verwendet wird.
  • [ARM64] Es wurde ein Problem behoben, durch das der Debugger SIMD-Register mit ihren niedrigeren 64 Bits anzeigte, die in den hohen 64 Bits dupliziert wurden.
  • [AMD64] AVX512-Emulationskorrekturen für AMD Zen4-Prozessoren (Register wurden beschädigt).

Geändert

  • Implementieren Sie ein neues Versionsverwaltungssystem speziell für den Emulator. (1.11.260)

Korrigiert

  • Beheben Sie fehlerhafte ARM64-Anweisungen, bei denen das Zielregister auch als Quelle verwendet wird. (1.11.261)
  • Beheben Sie die Zen4-Problemumgehung für direkte Rückgaben an den Emulator. (1.11.222)

1.11.202

Diese Version behebt mehrere Probleme, die beim Starten von Aufzeichnungsdiensten oder beim Starten des Überwachungsvorgangs über die -monitor Option auftreten. Außerdem wird die ARM32-Aufzeichnungsunterstützung aus dem Produkt entfernt.

Geändert

  • Verringern Sie die Binäre Größe, indem Sie TTD-Komponenten als DLL mit UCRT verknüpfen. (1.11.191)

Korrigiert

  • Beheben der Aufzeichnung von Diensten. (1.11.193)
  • Beheben Sie mehrere Probleme bei der Verwendung von -monitor. (1.11.189)
  • Korrigieren Sie den Stapelframe der Funktion, die bei der Ausführung von Fallbacks auf x64 nicht veränderlich bleibt (1.11.188)
  • Erneutes Aktivieren des Ausgabepuffers für TTD (1.11.187)
  • Beheben der Behandlung des GPO-Handles im ProcessMonitorServer (1.11.179)

Entfernt

  • Entfernen von ARM32-Aufzeichnungscode aus dem Repository (1.11.198)

1.11.173

Diese Version erhöht die Sichtbarkeit bestimmter Fehlermeldungen, indem sie aus der OUT-Datei extrahiert und in die Konsole gedruckt werden. Außerdem wird ein seltener Absturz während der Ablaufverfolgungswiedergabe behoben.

Geändert

  • Extrahieren und Drucken von Fehlermeldungen aus der OUT-Datei (1.11.173)

Korrigiert

  • Beheben Sie den Dateikonflikt beim Lesen von .out-Dateien aus einem separaten Prozess. (1.11.171)
  • Behebung eines seltenen Absturzes während der Trace-Wiedergabe. (1.11.166)

1.11.163

Diese Version bietet Unterstützung für die Aufzeichnung von x86-Prozessen auf x64-Computern.

Geändert

  • Beheben der x86-Aufzeichnung mit x64 TTD-Installation (1.11.163)

Korrigiert

  • EULA-Bereinigung (1.11.161)

1.11.159

Diese Version ist die erste öffentliche Version des Befehlszeilenrekorders. Zusammen mit mehreren Änderungen, die erforderlich sind, um die öffentliche Veröffentlichung des Befehlszeilenrekorders zu ermöglichen, enthält diese Version auch mehrere Fehlerbehebungen, einschließlich einiger Fixes für den CPU-Emulator.

Der neue Schalter -timestampFileName ermöglicht die Zeitstempelbasierte .run-Dateigenerierung. Dieser Schalter ist nützlich, wenn Sie viele Instanzen desselben Prozesses aufzeichnen und die Startzeit der Aufzeichnung minimieren möchten.

Geändert

  • Wählen Sie den Standardeinfügungsmodus zur Laufzeit basierend auf dem verwendeten Tracer (1.11.156) aus.
  • Option zum Aktivieren der zeitstempelbasierten .run-Dateigenerierung hinzufügen (1.11.155)
  • Hinzufügen von EULA und -accepteula TTD (1.11.154)
  • Hinzufügen von ProcLaunchMon.sys zu MSIX (1.11.153)
  • Erstellen sie pro Bogen MSIX und MSIXBUNDLE (1.11.152)
  • Beheben Sie mehrere Probleme, die beim Testen von TTD mit Clang entstanden sind. (1.11.146)
  • Clang-Fixes für TTDAnalyze (1.11.144)

Korrigiert

  • Feedback zu appinstaller / public release (1.11.159) überprüfen
  • RC-Feedback (1.11.157)
  • Vermeiden Sie den Papierkorb des Zero-Registers, indem Sie RegisterInfo initialisieren, um auf "Sink" zu verweisen. (1.11.149)
  • Beheben Sie die TST-Anweisung mit sofortiger Und verbessern Sie den Komponententest, um ihn und vieles mehr abzudecken. (1.11.148)
  • Konsolidieren der Entscheidung über geschützte Prozesse und Deaktivieren der Verwendung geschützter Prozesse (1.11.147)

1.11.138

Geändert

  • Erstellen von Recorder MSIX (1.11.138)
  • Beheben Sie alle Probleme, damit Clang TTD erstellen kann. (1.11.137)
  • Einführen von -monitor X als Methode zum Aufzeichnen eines Prozesses beim Start (1.11.116)

Korrigiert

  • Beheben der ARM64-Emulation "CMP ZR" (1.11.128)
  • Beheben der AVX512-Emulation auf AMD Zen4-Prozessoren (1.11.127)
  • Beheben Sie den Mechanismus, mit dem TTD Dateien für eine bestimmte CPU (1.11.121) finden.
  • X86 TTD-Regression beheben (TTDRecordCPU.dll nicht geladen werden kann) (1.11.110)
  • Beheben sie die Rückkehr zum systemeigenen Pfad auf ARM64, um nicht den Papierkorb X28 (1.11.109) zu beheben.

Weitere Informationen

Zeitreise-Debugging – Überblick

Time Travel Debugging – Befehlszeilenaufzeichnung