Time Travel Debugging – Übersicht

Time travel debugging logo featuring a clock.

Was ist Time Travel Debugging?

Time Travel Debugging ist ein Tool, mit dem Sie eine Ablaufverfolgung Ihres Prozesses während der Ausführung erfassen und später sowohl vorwärts als auch rückwärts wiedergeben können. Time Travel Debugging (TTD) kann Ihnen helfen, Probleme einfacher zu debuggen, indem Sie die Debuggersitzung "zurückspulen" können, anstatt das Problem reproduzieren zu müssen, bis Sie den Fehler gefunden haben.

MIT TTD können Sie rechtzeitig zurückkehren, um die Bedingungen, die zu dem Fehler führen, besser zu verstehen und mehrmals wiederzugeben, um zu erfahren, wie das Problem am besten behoben werden kann.

TTD kann Vorteile gegenüber Absturzabbilddateien haben, die häufig den Zustands- und Ausführungspfad verpassen, der zum ultimativen Fehler führte.

Wenn Sie das Problem selbst nicht herausfinden können, können Sie die Ablaufverfolgung mit einem Kollegen teilen, und sie können genau sehen, was Sie betrachten. Dies kann eine einfachere Zusammenarbeit als das Livedebugging ermöglichen, da die aufgezeichneten Anweisungen identisch sind, während sich die Adressspeicherorte und die Codeausführung auf verschiedenen PCs unterscheiden. Sie können auch einen bestimmten Zeitpunkt teilen, um Ihren Kollegen zu helfen, herauszufinden, wo sie beginnen sollen.

TTD ist effizient und kann so wenig wie möglich mehr Aufwand hinzufügen, da die Codeausführung in Ablaufverfolgungsdateien erfasst wird.

TTD enthält eine Reihe von Debugger-Datenmodellobjekten, mit denen Sie die Ablaufverfolgung mithilfe von LINQ abfragen können. Sie können z. B. TTD-Objekte verwenden, um zu suchen, wann ein bestimmtes Codemodul geladen wurde, oder nach allen Ausnahmen suchen.

Screenshot of WinDbg with Time Travel Debugging command and three timelines.

Anforderungen

Time Travel Debugging ist in WinDbg integriert und bietet eine nahtlose Aufzeichnung und Wiedergabe.

Um TTD zu verwenden, müssen Sie den Debugger mit erhöhten Rechten ausführen. Installieren Sie WinDbg mithilfe eines Kontos mit Administratorrechten und verwenden Sie dieses Konto beim Aufzeichnen im Debugger. Um den Debugger mit erhöhten Rechten auszuführen, halten Sie das WinDbg-Symbol im Menü gedrückt (oder klicken Sie mit der rechten Maustaste darauf), und wählen Sie dann "Als Administrator ausführen" > aus.

Die erstellte Ablaufverfolgungsdatei, die die Aufzeichnung enthält, kann personenbezogene oder sicherheitsbezogene Informationen enthalten, einschließlich, aber nicht unbedingt beschränkt auf Dateipfade, Registrierung, Speicher oder Dateiinhalte. Genaue Informationen hängen von der Zielprozessaktivität ab, während sie aufgezeichnet wurde. Beachten Sie dies beim Freigeben von Aufzeichnungsdateien für andere Personen.

TTD.exe Befehlszeilenaufzeichnungsprogramm

Neben der Aufzeichnung von Ablaufverfolgungen in der WinDbg-Benutzeroberfläche steht ein TTD.exe Befehlszeilenprogramm zum Aufzeichnen einer Ablaufverfolgung zur Verfügung.

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. Weitere Informationen finden Sie unter Time Travel Debugging – TTD.exe Befehlszeilenprogramm.

Vergleich der Debugtools

In dieser Tabelle sind die Vor- und Nachteile der verschiedenen verfügbaren Debuglösungen zusammengefasst.

Vorgehensweise Vorteile Nachteile
Live-Debuggen Interaktive Erfahrung, sieht fluss der Ausführung, kann den Zielzustand ändern, vertrautes Tool in der vertrauten Einstellung. Stört die Benutzererfahrung, kann anstrengungen erforderlich sein, das Problem wiederholt zu reproduzieren, kann sich auf die Sicherheit auswirken, nicht immer eine Option für Produktionssysteme. Wenn die Wiederverwendung schwierig ist, von einem Fehlerpunkt zurückzuarbeiten, um die Ursache zu ermitteln.
Dumps Keine Codierung im Voraus, low-intrusiveness, basierend auf Triggern. Aufeinander folgende Momentaufnahme oder Liveabbilder bieten eine einfache Ansicht "im Laufe der Zeit". Der Overhead ist im Wesentlichen null, wenn er nicht verwendet wird.
Telemetrie und Protokolle Leicht, häufig an Geschäftsszenarien / Benutzeraktionen gebunden, machine Learning freundlich. Probleme treten in unerwarteten Codepfaden auf (ohne Telemetrie). Fehlende Datentiefe, statisch kompiliert in den Code.
Time Travel Debugging (TTD) Großartig bei komplexen Fehlern, ohne Codierung vorab, offline wiederholbares Debuggen, Analyse freundlich, erfasst alles. Großer Aufwand zur Datensatzzeit. Kann mehr Daten sammeln, die benötigt werden. Datendateien können groß werden.

Lehrvideos

Weitere Informationen zu TTD finden Sie in diesen Videos.

Defrag Tools 185 - Ivette und JamesP gehen über die Grundlagen von TTD und Demo einige Features in WinDbg

Defrag Tools 186 - Jordi und JCAB Demo mehr großartige Features von TTD in WinDbg

CppCon (YouTube) - Jordi, Ken und JamesM präsentiert TTD in WinDbg auf CppCon 2017

Grundlagen der Ablaufverfolgungsdatei

Größe der Ablaufverfolgungsdatei

Die Ablaufverfolgungsdatei kann groß werden, und der Benutzer von TTD muss sicherstellen, dass ausreichend freier Speicherplatz verfügbar ist. Wenn Sie ein Programm für ein paar Minuten aufzeichnen, können die Ablaufverfolgungsdateien schnell auf mehrere Gigabyte wachsen. TTD legt keine maximale Größe von Ablaufverfolgungsdateien fest, um komplexe Szenarien mit langer Ausführung zu ermöglichen. Das Problem wird schnell neu erstellt, sodass die Dateigröße der Ablaufverfolgung so klein wie möglich bleibt.

Ablaufverfolgungs- und Indexdateien

Eine Ablaufverfolgungsdatei (.run) speichert die Codeausführung während der Aufzeichnung.

Sobald die Aufzeichnung beendet wurde, wird eine Indexdatei (.idx) erstellt, um den Zugriff auf die Ablaufverfolgungsinformationen zu optimieren. Indexdateien werden auch automatisch erstellt, wenn WinDbg Ablaufverfolgungsdateien öffnet.

Indexdateien können auch groß sein, in der Regel doppelt so groß wie die Ablaufverfolgungsdatei.

Sie können die Indexdatei mithilfe des !tt.index Befehls aus der Ablaufverfolgungsdatei neu erstellen.

0:000> !tt.index
Successfully created the index in 10ms.

Aufzeichnungsfehler und andere Aufzeichnungsausgabe werden in eine WinDbg-Protokolldatei geschrieben.

Alle Ausgabedateien werden an einem vom Benutzer konfigurierten Speicherort gespeichert. Der Standardspeicherort befindet sich im Dokumentordner für Benutzer. Beispielsweise würden die TTD-Dateien für Benutzer1 hier gespeichert:

C:\Users\User1\Documents

Weitere Informationen zum Arbeiten der Ablaufverfolgungsdateien finden Sie unter Time Travel Debugging – Arbeiten mit Ablaufverfolgungsdateien.

Dinge, die Sie suchen sollten

Vireninkompatibilitäten

Aufgrund der Art und Weise, wie TTD-Hooks verarbeitet werden, können Inkompatibilitäten auftreten, um sie aufzuzeichnen. In der Regel treten Probleme mit Antivirensoftware oder anderer Systemsoftware auf, die versucht, Speicheraufrufe des Schattensystems nachzuverfolgen und abzuschatten. Wenn Probleme mit der Aufzeichnung auftreten, z. B. eine unzureichende Berechtigungsmeldung, versuchen Sie, alle Antivirensoftware vorübergehend zu deaktivieren.

Andere Dienstprogramme, die versuchen, den Speicherzugriff zu blockieren, können auch problematisch sein, z. B. das Microsoft Enhanced Mitigation Experience Toolkit.

Ein weiteres Beispiel für eine Umgebung, die mit TTD in Konflikt ist, wäre das Elektronenanwendungsframework. In diesem Fall kann die Ablaufverfolgung aufzeichnen, aber es ist auch ein Deadlock oder ein Absturz des aufgezeichneten Prozesses möglich.

Nur Benutzermodus

TTD unterstützt derzeit nur den Benutzermodusvorgang, sodass die Ablaufverfolgung eines Kernelmodusprozesses nicht möglich ist.

Schreibgeschützte Wiedergabe

Sie können in der Zeit zurückreisen, aber Sie können den Verlauf nicht ändern. Sie können Lesespeicherbefehle verwenden, sie können jedoch keine Befehle verwenden, die den Speicher ändern oder in den Arbeitsspeicher schreiben.

Systemgeschützte Prozesse

Einige windows-systemgeschützte Prozesse, z. B. protected Process Light (PPL)-Prozess, sind geschützt, sodass sich die TTD nicht in den geschützten Prozess einfügen kann, um die Aufzeichnung der Codeausführung zu ermöglichen.

Auswirkungen der Aufzeichnung auf die Leistung

Das Aufzeichnen einer Anwendung oder eines Prozesses wirkt sich auf die Leistung des PCs aus. Der tatsächliche Leistungsaufwand variiert je nach Umfang und Typ des Codes, der während der Aufzeichnung ausgeführt wird. Sie können in typischen Aufzeichnungsszenarien einen 10x-20x-Leistungstreffer erwarten. Manchmal wird es keine spürbare Verlangsamung geben, aber für ressourcenintensivere Vorgänge (d. h. Dialogfeld "Datei öffnen") können Sie die Auswirkungen der Aufzeichnung sehen.

Ablaufverfolgung von Dateifehlern

Es gibt einige Fälle, in denen Ablaufverfolgungsdateifehler auftreten können. Weitere Informationen finden Sie unter Time Travel Debugging – Problembehandlung.

Erweiterte Features des Time Travel Debugging

Hier sind einige der wichtigsten erweiterten TTD-Features.

Zeitpläne

Zeitachsen sind eine visuelle Darstellung von Ereignissen, die während der Ausführung auftreten. Diese Ereignisse können Speicherorte sein: Haltepunkte, Speicherlese-/Schreibzugriffe, Funktionsaufrufe und -rückgaben sowie Ausnahmen. Weitere Informationen zu Zeitleiste s finden Sie unter WinDbg – Zeitachsen.

Unterstützung des Debuggerdatenmodells

  • Integrierte Datenmodellunterstützung – TTD umfasst Datenmodellunterstützung. Die Verwendung von LINQ-Abfragen zum Analysieren von Anwendungsfehlern kann ein leistungsfähiges Tool sein. Sie können das Datenmodellfenster in WinDbg verwenden, um mit einer erweiterbaren und durchbrochenen Version von "dx" und "dx -g" zu arbeiten, sodass Sie Tabellen mit NatVis-, JavaScript- und LINQ-Abfragen erstellen können.

Allgemeine Informationen zum Debuggerdatenmodell finden Sie unter WinDbg – Datenmodell. Informationen zum Arbeiten mit dem TTD-Debuggerobjektmodell finden Sie unter Time Travel Debugging – Einführung in Time Travel Debugging-Objekte.

Skriptunterstützung

Allgemeine Informationen zum Arbeiten mit JavaScript und NatVis finden Sie unter WinDbg – Scripting.

TTD.exe Befehlszeilenprogramm

Das Befehlszeilenprogramm TTD.exe zum Aufzeichnen von Ablaufverfolgungen ist verfügbar. Weitere Informationen finden Sie unter Time Travel Debugging – TTD.exe Befehlszeilenprogramm.

TtD-Unterstützung für verwalteten Code

Sie können die SOS-Debugerweiterung (sos.dll) verwenden, die im 64-Bit-Modus ausgeführt wird, um verwalteten Code mithilfe von TTD in WinDbg zu debuggen. Weitere Informationen finden Sie unter Debuggen von verwaltetem Code mithilfe des Windows-Debuggers.

Erste Schritte mit TTD

Lesen Sie diese Themen, um eine Ablaufverfolgungsdatei aufzuzeichnen und wiederzugeben sowie Informationen zum Arbeiten mit Ablaufverfolgungsdateien und zur Problembehandlung zu finden.

In diesen Themen werden zusätzliche erweiterte Funktionen im Zeitreisendebugging beschrieben.