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

另请参阅

时光穿越调试 - 时光穿越调试对象简介

时光穿越调试 - 概述