次の方法で共有


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        

参照

Time Travel Debugging - Time Travel Debugging オブジェクトの概要

Time Travel Debugging - 概要

dx (デバッガー オブジェクト モデル式の表示)