Description
TTD Calls objects are used to give information about function calls that occur over the course of a trace.
Parameters
| Property | Description |
|---|---|
| Function!SymbolName | 一或多個包含在雙引號中,並以逗號分隔。 例如 dx @$cursession。TTD。Calls(“module!symbol1”, “module!symbol2”, ...) |
屬性
| Property | Description |
|---|---|
| EventType | 事件的類型。 這是所有 TTD 呼叫物件的「呼叫」。 |
| ThreadId | 發出要求的線程OS線程標識碼。 |
| UniqueThreadId | 追蹤中線程的唯一標識碼。 一般線程標識碼可以在進程存留期內重複使用,但 UniqueThreadIds 無法重複使用。 |
| Function | 函式的符號名稱。 |
| FunctionAddress | 函式在記憶體中的位址。 |
| ReturnValue | 函式的傳回值。 如果函式具有 void 類型,則此屬性將不會存在。 |
Children
| Object | Description |
|---|---|
| Parameters[] | 數位,包含傳遞至函式的參數。 元素數目會根據函式的類型簽章而有所不同。 |
| TimeStart | A position object that describes the position at the start of the call. |
| TimeEnd | A position object that describes the position at the end of the call. |
Remarks
時間移動偵錯會使用 PDB 中提供的符號資訊來判斷函式及其類型、傳回值類型和呼叫慣例的參數數目。 如果符號信息無法使用,或符號已限製為公用符號資訊,仍然可以執行查詢。 時間移動查詢引擎在此案例中會進行一些假設:
- 函式有四個 64 位無符號整數參數
- 傳回值是64位無符號整數
- 函式名稱設定為固定字串:“UnknownOrMissingSymbols”
這些假設可讓查詢在沒有適當的符號信息的情況下進行。 不過,為了獲得最佳結果,請盡可能使用完整的 PDB 符號。
請注意,Calls 函式會執行計算,而且視追蹤的大小而定,可能需要一段時間才能執行。 CPU 使用量會在計算期間尖峰,並監看任務管理器中的CPU使用量,表示計算正在進行中。 查詢結果會在記憶體中快取,因此針對先前查詢的呼叫進行後續查詢的速度會大幅加快。
Example Usage
此範例顯示 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