TTD 调用对象
说明
TTD Calls 对象用于提供有关在跟踪过程中发生的函数调用的信息。
参数
属性 | 说明 |
---|---|
功能!SymbolName | 一个或多个包含在双引号中,用逗号分隔。 例如 dx @$cursession。TTD.调用 (“module!symbol1”、“module!symbol2”、 ...) |
属性
属性 | 说明 |
---|---|
EventType | 事件的类型。 对于所有 TTD Calls 对象,这是“调用”。 |
ThreadId | 发出请求的线程的 OS 线程 ID。 |
UniqueThreadId | 跟踪中线程的唯一 ID。 常规线程 ID 可以在进程的生存期内重复使用,但 UniqueThreadIds 不能。 |
函数 | 函数的符号名称。 |
FunctionAddress | 函数在内存中的地址。 |
返回值 | 函数的返回值。 如果函数具有 void 类型,则此属性将不存在。 |
子女
Object | 说明 |
---|---|
Parameters[] | 包含传递给函数的参数的数组。 元素的数量因函数的类型签名而异。 |
TimeStart | 一个 位置对象 ,用于描述调用开始时的位置。 |
TimeEnd | 一个 位置对象 ,描述调用结束时的位置。 |
注解
时序调试使用 PDB 中提供的符号信息来确定函数及其类型、返回值类型和调用约定的参数数。 如果符号信息不可用或符号被限制为公共符号信息,仍可以执行查询。 在此方案中,时程查询引擎将做出一些假设:
- 函数有四个 64 位无符号整数参数
- 返回值为 64 位无符号整数
- 函数名称设置为固定字符串:“UnknownOrMissingSymbols”
这些假设允许在没有足够符号信息的情况下进行查询。 但是,为了获得最佳结果,请尽可能使用完整的 PDB 符号。
请注意,Calls 函数执行计算,并且根据跟踪的大小,可能需要一段时间才能运行。 CPU 使用率将在计算期间达到峰值,并监视任务管理器中的 CPU 使用率,指示计算正在进行。 查询结果缓存在内存中,因此针对以前查询的调用的后续查询明显加快。
示例用法
此示例显示了 ucrtbase!initterm 的 calls 对象。
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
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈