TTD 呼叫物件
描述
TTD 呼叫 物件可用來提供追蹤過程中發生的函數調用相關信息。
參數
屬性 | 說明 |
---|---|
功能!SymbolName | 一或多個包含在雙引號中,並以逗號分隔。 例如 dx @$cursession。TTD。Calls(“module!symbol1”, “module!symbol2”, ...) |
屬性
屬性 | 說明 |
---|---|
EventType | 事件的類型。 這是所有 TTD 呼叫物件的「呼叫」。 |
ThreadId | 發出要求的線程OS線程標識碼。 |
UniqueThreadId | 追蹤中線程的唯一標識碼。 一般線程標識碼可以在進程存留期內重複使用,但 UniqueThreadIds 無法重複使用。 |
函式 | 函式的符號名稱。 |
FunctionAddress | 函式在記憶體中的位址。 |
ReturnValue | 函式的傳回值。 如果函式具有 void 類型,則此屬性將不會存在。 |
Children
Object | 描述 |
---|---|
Parameters[] | 數位,包含傳遞至函式的參數。 元素數目會根據函式的類型簽章而有所不同。 |
TimeStart | 位置物件,描述呼叫開始時的位置。 |
TimeEnd | 位置物件,描述呼叫結尾的位置。 |
備註
時間移動偵錯會使用 PDB 中提供的符號資訊來判斷函式及其類型、傳回值類型和呼叫慣例的參數數目。 如果符號信息無法使用,或符號已限製為公用符號資訊,仍然可以執行查詢。 時間移動查詢引擎在此案例中會進行一些假設:
- 函式有四個 64 位無符號整數參數
- 傳回值是64位無符號整數
- 函式名稱設定為固定字串:“UnknownOrMissingSymbols”
這些假設可讓查詢在沒有適當的符號信息的情況下進行。 不過,為了獲得最佳結果,請盡可能使用完整的 PDB 符號。
請注意,Calls 函式會執行計算,而且視追蹤的大小而定,可能需要一段時間才能執行。 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