TTD ruft Objekte auf
Beschreibung
TTD-Aufrufobjekte werden verwendet, um Informationen zu Funktionsaufrufen zu geben, die im Verlauf einer Ablaufverfolgung auftreten.
Parameter
Eigenschaft | Beschreibung |
---|---|
Funktion! SymbolName | Ein oder mehrere in doppelten Anführungszeichen enthalten, getrennt durch ein Komma. Beispiel: dx @$cursession. TTD. Calls("module!symbol1", "module!symbol2", ...) |
Eigenschaften
Eigenschaften | Beschreibung |
---|---|
EventType | Den Typ des Ereignisses Dies ist "Call" für alle TTD Calls-Objekte. |
ThreadId | Die Betriebssystemthread-ID des Threads, der die Anforderung gestellt hat. |
UniqueThreadId | Eine eindeutige ID für den Thread über die Ablaufverfolgung hinweg. Reguläre Thread-IDs können während der Lebensdauer eines Prozesses wiederverwendet werden, uniqueThreadIds können jedoch nicht verwendet werden. |
Funktion | Der symbolische Name der Funktion. |
FunctionAddress | Die Adresse der Funktion im Arbeitsspeicher. |
ReturnValue | Der Rückgabewert der Funktion. Wenn die Funktion einen ungültigen Typ aufweist, ist diese Eigenschaft nicht vorhanden. |
Children
Object | Beschreibung |
---|---|
Parameter[] | Ein Array, das die Parameter enthält, die an die Funktion übergeben werden. Die Anzahl der Elemente variiert je nach Typsignatur der Funktion. |
TimeStart | Ein Positionsobjekt , das die Position am Anfang des Aufrufs beschreibt. |
TimeEnd | Ein Positionsobjekt , das die Position am Ende des Aufrufs beschreibt. |
Hinweise
Time Travel Debugging verwendet Symbolinformationen, die in den PDBs bereitgestellt werden, um die Anzahl der Parameter für eine Funktion und deren Typen, den Rückgabewerttyp und die aufrufende Konvention zu bestimmen. Wenn Symbolinformationen nicht verfügbar sind oder die Symbole auf öffentliche Symbolinformationen beschränkt wurden, ist es weiterhin möglich, Abfragen durchzuführen. Das Zeitreiseabfragemodul nimmt in diesem Szenario einige Annahmen vor:
- Es gibt vier ganzzahlige 64-Bit-Parameter ohne Vorzeichen für die Funktion.
- Der Rückgabewert ist eine 64-Bit-ganzzahl ohne Vorzeichen
- Der Funktionsname wird auf eine feste Zeichenfolge festgelegt: "UnknownOrMissingSymbols"
Diese Annahmen ermöglichen es, abfragen zu können, wenn keine angemessenen Symbolinformationen vorhanden sind. Um optimale Ergebnisse zu erzielen, verwenden Sie jedoch nach Möglichkeit vollständige PDB-Symbole.
Beachten Sie, dass die Aufruffunktion berechnungen und je nach Größe der Ablaufverfolgung eine Weile dauern kann. Die CPU-Auslastung wird während der Berechnung spitzen und die CPU-Auslastung im Task-Manager überwacht, gibt einen Hinweis darauf, dass die Berechnung voranschreitet. Die Abfrageergebnisse werden im Arbeitsspeicher zwischengespeichert, sodass nachfolgende Abfragen für zuvor abgefragte Aufrufe wesentlich schneller sind.
Verwendungsbeispiel
Dieses Beispiel zeigt das Aufrufobjekt für ucrtbase!initterm.
0:000> dx -r2 @$cursession.TTD.Calls("ucrtbase!initterm")
@$cursession.TTD.Calls("ucrtbase!initterm")
[0x0]
EventType : Call
ThreadId : 0x2074
UniqueThreadId : 0x2
TimeStart : 1E:5D0
TimeEnd : 2D:E
Function : ucrtbase!_initterm
FunctionAddress : 0x7ffb345825d0
ReturnAddress : 0x7ff6a521677e
Parameters
SystemTimeStart : Friday, January 12, 2024 21:18:40.799
SystemTimeEnd : Friday, January 12, 2024 21:18:44.26
Weitere Informationen
Debuggen von Zeitreisen – Einführung in Objekte zum Debuggen von Zeitreisen