Zeitreise-Debugging – Überblick
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.
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.
Versionshinweise
TTD entwickelt sich weiter, um die neuesten Informationen zu erhalten, siehe Versionshinweise zum Time Travel Debugging.
Die Aufzeichnung kann personenbezogene oder sicherheitsbezogene Informationen enthalten.
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. | Aufeinanderfolgende Momentaufnahmen 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. Durch eine schnelle Neuerstellung des Problems wird die Größe der Ablaufverfolgungsdatei so klein wie möglich gehalten.
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. Zum Beispiel würden die TTD-Dateien für Benutzer1 hier gespeichert werden:
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 in der Benutzeroberfläche geben. Für die ressourcenintensiveren Vorgänge, z. B. das Dialogfeld "Datei öffnen", sehen Sie jedoch die Auswirkungen der Aufzeichnung.
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
Zeitpläne
Zeitleisten sind eine visuelle Darstellung der Ereignisse, die während der Ausführung stattfinden. Bei diesen Ereignissen kann es sich um Haltepunkte, Lese- und Schreibvorgänge im Speicher, Funktionsaufrufe und -rückgaben sowie Ausnahmen handeln. Weitere Informationen zu Zeitachsen 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
- Skriptautomatisierung – Skriptunterstützung für JavaScript und NatVis ermöglicht die Automatisierung der Problemuntersuchung. Weitere Informationen finden Sie unter Time Travel Debugging – JavaScript Automation.
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.
- Time Travel Debugging – Aufzeichnen einer Ablaufverfolgung
- Zeitreise-Debugging – Wiederholung einer Aufzeichnung
- Zeitreise-Debugging – Arbeiten mit Ablaufverfolgungsdateien
- Zeitreise-Debugging – Problembehebung
- Zeitreise-Debugging – Beispiel-App Walkthrough
In diesen Themen werden zusätzliche erweiterte Funktionen im Zeitreisendebugging beschrieben.