Zeitreise-Debugging – Arbeiten mit Ablaufverfolgungsdateien
In diesem Abschnitt wird beschrieben, wie Sie mit Dateien arbeiten, die durch das Debugging von Zeitreisen erstellt und verbraucht werden.
Übersicht über Ablaufverfolgungsdateien
Beim Debuggen von Zeitreisen werden die folgenden Dateien zum Debuggen der Codeausführung verwendet.
Die Ablaufverfolgungsdatei enthält die Aufzeichnung der Codeausführung und hat die Erweiterung .RUN.
Die Indexdatei ermöglicht einen schnellen Zugriff auf Informationen in der Ablaufverfolgungsdatei und hat die Erweiterung .IDX.
Aufzeichnungsfehler und andere Aufzeichnungsausgaben werden in die Debugger-Protokolldatei geschrieben.
.RUN-Ablaufverfolgungsdateien
.RUN-Ablaufverfolgungsdateien können nach der Aufzeichnung mit File>Start debugging>Open trace file geöffnet werden.
Alle Ausgabedateien der Ablaufverfolgung werden standardmäßig im Dokumentordner des Benutzers gespeichert. Zum Beispiel würden die TTD-Dateien für Benutzer1 hier gespeichert werden:
C:\Users\User1\Documents
Sie können den Speicherort der Ablaufverfolgungsdateien ändern, wenn Sie mit der Aufzeichnung beginnen. Weitere Informationen finden Sie unter Zeitreise-Debugging – Aufzeichnung.
Die Liste der zuletzt verwendeten Dateien ermöglicht Ihnen einen schnellen Zugriff auf zuvor verwendete Zielkonfigurationsdateien. Alle kürzlich verwendeten Ablaufverfolgungsdateien oder Dump-Dateien werden ebenfalls aufgelistet.
.IDX-Indexdateien
Eine .IDX-Indexdatei wird für die zugehörige .RUN-Ablaufverfolgungsdatei automatisch erstellt, wenn die Ablaufverfolgungsdatei in WinDbg geöffnet wird. Sie können die Indexdatei manuell erstellen, indem Sie den Befehl !index verwenden. Ein Index ermöglicht einen schnelleren Zugriff auf die Informationen zur Ablaufverfolgung.
IDX-Dateien können auch sehr groß sein, in der Regel doppelt so groß wie die .RUN-Datei.
Die IDX-Datei neu erstellen
Sie können die .IDX-Datei mit dem Befehl !index
aus der .RUN-Datei neu erstellen. Weitere Informationen finden Sie unter Zeitreise-Debugging – !index (time travel).
0:0:001> !index
Indexed 3/3 keyframes
Successfully created the index in 49ms.
Gemeinsame Nutzung von .RUN-Dateien für die TTD-Ablaufverfolgung
TTD ist nur lokal verfügbar und funktioniert nicht, wenn es mit einem anderen Rechner verbunden ist.
TTD-Ablaufverfolgungsdateien können an andere weitergegeben werden, indem die .RUN-Datei kopiert wird. Dies kann praktisch sein, wenn Sie einen Mitarbeiter bitten, Ihnen bei der Lösung des Problems zu helfen. Sie müssen die abstürzende Anwendung nicht installieren oder andere damit verbundene Einstellungen vornehmen, um das Problem zu reproduzieren. Sie können einfach die Ablaufverfolgungsdatei laden und die Anwendung debuggen, als ob sie auf ihrem PC installiert wäre.
Der Computer, auf dem Sie die TTD-Ablaufverfolgung wiedergeben, muss alle Befehle unterstützen, die auf dem Aufzeichnungscomputer verwendet wurden – zum Beispiel AVX-Befehle.
Sie können die Datei umbenennen und zusätzliche Informationen wie das Datum oder eine Fehlernummer hinzufügen.
Die .IDX-Datei muss nicht kopiert werden, da sie wie oben beschrieben mit dem Befehl !index neu erstellt werden kann.
Tipp
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.
Fehler – Protokolldatei
Aufzeichnungsfehler und andere Aufzeichnungsausgaben werden in die Debugger-Protokolldatei geschrieben. Um die Protokolldatei anzuzeigen, wählen Sie View>Logs aus.
Dieses Beispiel zeigt den Text des Fehlerprotokolls, wenn versucht wird, eine ausführbare Datei namens Foo.exe zu starten und aufzuzeichnen, die sich nicht im Verzeichnis C:\Windows befindet.
2017-09-21:17:18:10:320 : Information : DbgXUI.dll : TTD: Output:
Microsoft (R) TTD 1.01.02
Release: 10.0.16366.1000
Copyright (C) Microsoft Corporation. All rights reserved.
Launching C:\Windows\Foo.exe
2017-09-21:17:18:10:320 : Error : DbgXUI.dll : TTD: Errors:
Error: Trace of C:\Windows\Foo.exe PID:0 did not complete successfully: status:27
Error: Could not open 'Foo.exe'; file not found.
Error: Corrupted trace dumped to C:\Users\User1\Documents\Foo01.run.err.
Größe der Ablaufverfolgungsdatei
TTD-Ablaufverfolgungsdateien können sehr groß werden, und es ist wichtig, dass Sie genügend freien Speicherplatz zur Verfügung haben. Wenn Sie eine Anwendung oder einen Prozess auch nur für ein paar Minuten aufzeichnen, kann die Ablaufverfolgungsdatei mehrere Gigabyte groß werden. Die Größe der Ablaufverfolgungsdatei hängt von einer Reihe von Faktoren ab, die im Folgenden beschrieben werden.
TTD legt keine maximale Größe für Ablaufverfolgungsdateien fest, um komplexe, lang laufende Szenarien zu ermöglichen. Durch eine schnelle Neuerstellung des Problems wird die Größe der Ablaufverfolgungsdatei so klein wie möglich gehalten.
Faktoren für die Größe der Ablaufverfolgungsdatei
Es ist nicht möglich, eine genaue Schätzung der Größe der Ablaufverfolgungsdatei abzugeben, aber es gibt ein paar Faustregeln, die Ihnen helfen, die Größe der TTD-Dateien zu verstehen.
Die folgenden Faktoren können die Größe der Ablaufverfolgungsdatei beeinflussen:
- Die Anzahl der Codeanweisungen, die bei der Aufzeichnung der laufenden Anwendung oder des Prozesses über alle Threads hinweg ausgeführt werden
- Die Dauer der Aufzeichnung der Anwendung oder des Prozesses (nur, da dies die Anzahl der aufgezeichneten Codeanweisungen beeinflusst)
- Die Größe der von der Anwendung oder dem Prozess verwendeten Speicherdaten
Die Anzahl der ausgeführten und aufgezeichneten Anweisungen ist der größte Faktor, der die Größe der Ablaufverfolgungsdatei beeinflusst. Eine Ablaufverfolgung benötigt in der Regel zwischen 1 Bit und 1 Byte pro ausgeführtem Befehl. Eine Ablaufverfolgung liegt wahrscheinlich am unteren Ende dieses Bereichs, wenn das aufgezeichnete Programm eine geringere Anzahl verschiedener Funktionen ausführt und mit einer geringeren Menge an Daten arbeitet. Eine Ablaufverfolgung wird wahrscheinlich am oberen Ende dieses Bereichs liegen, wenn das aufgezeichnete Programm eine größere Anzahl verschiedener Funktionen ausführt oder mit einer größeren Menge an Daten arbeitet.
Faustregel für die Größe von Ablaufverfolgungsdateien
Die Ablaufverfolgungsdatei wächst um etwa 5 MB bis 50 MB pro Sekunde, wenn eine aktive Anwendung oder ein aktiver Prozess aufgezeichnet wird, je nach den oben genannten Größenfaktoren der Ablaufverfolgungsdatei.
Die Ablaufverfolgungsdatei wächst nicht, wenn die aufgezeichnete Anwendung oder der aufgezeichnete Prozess im Leerlauf ist (z. B. beim Warten auf Eingaben).
Derzeit gibt es keine maximale Dateigröße für Ablaufverfolgungsdateien. WinDbg kann Ablaufverfolgungsdateien mit einer Größe von mehreren hundert Gigabyte wiedergeben.
Größe der Indexdatei
Die Indexdatei wird von WinDbg automatisch erstellt, wenn Sie eine Ablaufverfolgung zum ersten Mal öffnen. Sie enthält Informationen, die dem Debugger helfen, die Ablaufverfolgung wiederzugeben und Informationen über den Speicher effizienter abzufragen. Seine Größe beträgt im Allgemeinen das 1- bis 2-fache der Größe der Ablaufverfolgungsdatei. Die Faktoren, die sich auf die Größe der Datei auswirken, sind ähnlich wie die Faktoren, die sich auf die Größe der Ablaufverfolgungsdatei auswirken.
Erstens skaliert die Größe der Indexdatei relativ zur Länge der Ablaufverfolgung. Eine Ablaufverfolgung, die eine größere Anzahl von aufgezeichneten Anweisungen enthält, hat im Allgemeinen einen größeren Index.
Zweitens skaliert die Größe des Indexes im Verhältnis zur Breite der Speicherzugriffe. Wenn das aufgezeichnete Programm häufig auf eine große Anzahl verschiedener Speicherplätze zugreift, wird der Index im Allgemeinen größer sein, als wenn das aufgezeichnete Programm auf weniger verschiedene Speicherplätze zugreift oder wenn der Zugriff auf Speicherplätze weniger häufig erfolgt.
Da diese Faktoren den Faktoren ähneln, die sich auf die Größe der Ablaufverfolgungsdatei auswirken, skaliert die Größe der Indexdatei im Allgemeinen relativ zur Größe der Indexdatei (daher unsere Schätzung, dass sie typischerweise zwischen dem 1- und 2-fachen der Größe der Ablaufverfolgungsdatei liegt).
Was ist, wenn ich keinen Speicherplatz mehr habe?
Sowohl die TTD-Ablaufverfolgungs- als auch die Indexdateien werden auf die Festplatte geschrieben. Derzeit gibt es weder für die Ablaufverfolgungs- noch für die Indexdatei eine maximale Dateigrößenbeschränkung. Die Ablaufverfolgungsdatei wird immer größer, bis Sie die Aufzeichnung stoppen oder der verfügbare Speicherplatz überschritten wird.
Während der Aufnahme: TTD schreibt die letzte Seite in die Ablaufverfolgungsdatei und wartet dann so lange, bis es wieder schreiben kann. WinDbg zeigt weiterhin den Aufzeichnungsdialog an, gibt aber keine Fehler-/Warnmeldung aus, wenn der Speicherplatz während der Aufzeichnung knapp wird.
Wenn während der Aufzeichnung der Speicherplatz knapp wird, entsteht eine Ablaufverfolgungsdatei mit einer unvollständigen Aufzeichnung der Code-Ausführung. Die unvollständige Ablaufverfolgungsdatei kann in WinDbg geöffnet werden, aber sie enthält möglicherweise nicht das eigentliche Problem, wenn der Fehler auftritt, nachdem beim Schreiben der Ablaufverfolgungsdatei kein Speicherplatz mehr vorhanden ist.
Umgehung: Öffnen Sie den Datei-Explorer und überprüfen Sie, ob der freie Speicherplatz auf der Festplatte (z. B. Laufwerk C:) nahezu Null ist. Beobachten Sie alternativ die Ablaufverfolgungsdatei (.RUN) im Datei-Explorer (standardmäßig im Ordner „Documents“), und wenn sie nicht regelmäßig größer wird, wartet möglicherweise die Aufzeichnung. Wählen Sie in WinDbg die Schaltfläche Anhalten und Debuggen aus, geben Sie Speicherplatz frei oder speichern Sie auf einem anderen Datenträger, und starten Sie die Aufzeichnung erneut.
Während der Indizierung: Der Debugger kann eine ungültige Indexdatei erzeugen, was zu unvorhersehbarem Verhalten im Debugger führt, oder der Debugger-Engine-Host kann abstürzen.
Umgehung: Schließen Sie den Debugger, und löschen Sie eine eventuell vorhandene Indexdatei (.idx) für Ihre Ablaufverfolgung. Geben Sie entweder ausreichend Speicherplatz frei, oder verschieben Sie die Ablaufverfolgungsdatei auf eine andere Festplatte mit ausreichend freiem Speicherplatz. Öffnen Sie die Ablaufverfolgung erneut im Debugger und führen Sie !index aus, um einen neuen, korrekten Index zu erstellen. Bei der Indizierung wird die ursprüngliche Ablaufverfolgungsdatei (.run) nicht verändert, es gehen also keine Daten verloren.