TTD 呼び出しオブジェクト
説明
TTD 呼び出しオブジェクトは、トレースの過程で発生する関数呼び出しに関する情報を提供するために使用されます。
パラメーター
プロパティ | 説明 |
---|---|
Function!SymbolName | 二重引用符で囲み、コンマ区切りで 1 つ以上を指定。 たとえば、dx @$cursession。TTD。Calls("module!symbol1", "module!symbol2", ...) |
Properties
Property | 説明 |
---|---|
EventType | イベントのタイプ。 これは、すべての TTD 呼び出しオブジェクトの "呼び出し" です。 |
ThreadId | 要求を行ったスレッドの OS スレッド ID。 |
UniqueThreadId | トレースでのスレッドの一意の ID。 通常のスレッド ID はプロセスの有効期間中に再利用できますが、UniqueThreadIds は再利用できません。 |
機能 | 関数のシンボリック名。 |
FunctionAddress | メモリ内の関数のアドレス。 |
ReturnValue | 関数の戻り値。 関数が void 型の場合、このプロパティは存在しません。 |
子
Object | 説明 |
---|---|
Parameters[] | 関数に渡されるパラメーターを含む配列。 要素の数は、関数の型シグネチャによって異なります。 |
TimeStart | 呼び出しの開始時の位置を表す位置オブジェクト。 |
TimeEnd | 呼び出しの終了時の位置を表す位置オブジェクト。 |
解説
タイム トラベル デバッグでは、PDB で提供されるシンボル情報を使用して、関数のパラメーターの数とその型、戻り値の型、呼び出し規則を決定します。 シンボル情報が使用できない場合、またはシンボルがパブリック シンボル情報に制限されている場合でも、クエリを実行できます。 このシナリオでは、タイム トラベル クエリ エンジンによって以下のような前提条件が作成されます。
- 関数には 4 つの 64 ビット符号なし整数パラメーターがある
- 戻り値は、64 ビットの符号なし整数である
- 関数名は固定文字列 "UnknownOrMissingSymbols" に設定される
これらの前提条件により、適切なシンボル情報がない場合でもクエリを実行できます。 ただし、最良の結果を得るには、可能な限り完全な PDB シンボルを使用します。
呼び出し関数は計算を行い、トレースのサイズによっては、実行に時間がかかる場合があることに注意してください。 計算中は CPU 使用率が急増します。タスク マネージャーで CPU 使用率を監視すると、計算が進行中であることがわかります。 クエリ結果はメモリにキャッシュされるため、以前にクエリされた呼び出しに対する後続のクエリの方がはるかに高速になります。
使用例
この例は、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