TTD 调用对象

说明

TTD 调用 对象用于提供有关在跟踪过程中发生的函数调用的信息。

参数

properties 说明
功能!SymbolName 双引号中包含一个或多个,用逗号分隔。 例如 dx @$cursession。TTD。Calls(“module!symbol1”, “module!symbol2”, ...)

属性

属性 说明
EventType 事件类型。 这是所有 TTD 调用对象的“调用”。
ThreadId 发出请求的线程的 OS 线程 ID。
UniqueThreadId 跟踪中线程的唯一 ID。 常规线程 ID 可以在进程的生存期内重复使用,但 UniqueThreadIds 无法重复使用。
函数 函数的符号名称。
FunctionAddress 函数的内存中的地址。
返回值 函数的返回值。 如果函数具有 void 类型,则此属性将不存在。

Children

Object 说明
Parameters[] 包含传递给函数的参数的数组。 元素数因函数的类型签名而异。
TimeStart 一个 位置对象 ,描述调用开始时的位置。
TimeEnd 描述 调用末尾位置的位置对象

注解

时间旅行调试使用 PDB 中提供的符号信息来确定函数及其类型、返回值类型和调用约定的参数数。 如果符号信息不可用或符号仅限于公共符号信息,仍可以执行查询。 时间旅行查询引擎将在此方案中做出一些假设:

  • 函数有四个 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        

另请参阅

时间旅行调试 - 时间旅行调试对象简介

时间旅行调试 - 概述

dx(显示调试器对象模型表达式)