</nav><p>DTrace (DTrace.exe) 是一个命令行工具,用于显示系统信息和事件。 DTrace 是移植到 Windows 的一种开放源代码跟踪平台。 DTrace 最初是为 Solaris 操作系统而开发的。 它提供用户/内核函数的动态检测、使用 D 语言来编写脚本以及推理跟踪功能。 此外,DTrace 具有特定于 Windows OS 的扩展,例如 ETW 检测、ETW 事件生成、系统调用探测和实时转储捕获功能。</p>
讯享网
Windows GitHub 站点上的 DTrace 位于以下位置:
https://github.com/microsoft/DTrace-on-Windows
有关 DTrace 的详细信息,请参阅剑桥大学的 OpenDTrace 规范版本 1.0。
主要 GitHub 站点位于 https://github.com/opendtrace/。
https://github.com/opendtrace/toolkit 提供了一组实用脚本。
提供大量 DTrace 书籍,例如:
DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD,作者:Brendan Gregg 和 Jim Mauro
Solaris Performance and Tools: DTrace and MDB Techniques for Solaris 10 and OpenSolaris,作者:Richard McDougall、Jim Mauro 和 Brendan Gregg
使用反馈中心请求新功能,或是通过 Windows DTrace 报告任意问题或 bug。
- 若要在 Windows 中启动反馈中心,请转到搜索,输入字词反馈,然后选择“反馈中心”。
- 选择建议功能或报告问题。
- 提供问题或建议的详细、具体说明。
以下是 Windows 上提供的一些 Dtrace 提供程序及其检测内容。
- syscall – NTOS 系统调用
- fbt(函数边界跟踪)- 内核函数条目和返回
- pid(进程 ID)- 用户模式进程跟踪。 与内核模式 FBT 一样,但还允许检测任意函数偏移量。
- etw(适用于 Windows 的事件跟踪)- 允许为 ETW 定义探测,而此提供程序有助于利用 DTrace 中的现有操作系统检测。
SYSCALL 可为每个系统调用提供一对探测:其中一个为入口探测,它可在进入系统调用之前触发;另一个则为返回探测,它可在系统调用已完成但将控制转移回用户级别之前来触发。 对于所有 SYSCALL 探测,函数名称均会设为已检测系统调用的名称,而模块名称则是函数所在的模块。 可通过从命令提示符键入命令 来查找由 SYSCALL 提供程序提供的系统调用的名称。 请注意,探测名称为小写的 syscall。 命令还会列出 syscall 提供程序提供的所有探测及其参数。
讯享网
请注意,这些示例并未显示所有屏幕输出。 “...”被用于表示截断的输出。
若要滚动查看整个输出,请按如下所示并通过管道输出到 more 命令:
添加 v 选项可显示有关可用 syscall 探测的详细信息。
DTrace 包括对现有已列入清单/已记录到跟踪日志的 ETW 探测的支持。 可在事件触发时同步检测、筛选和分析 ETW 事件。 此外,DTrace 还可用于合并各种事件/系统状态,从而提供合并的输出流来帮助调试复杂的错误情况。
命令会列出 syscall 提供程序提供的所有探测及其参数。
讯享网
有关详细信息,请参阅 DTrace ETW。
函数边界跟踪 (FBT) 提供程序可提供与 Windows 内核中大多数函数的入口和返回相关联的探测。 此函数为程序文本的基本单元。 与其他 DTrace 提供程序类似,如果未显式启用 FBT,则无探测效果。 启用后,FBT 只会在被探测函数中引入探测效果。 FBT 已在 x86 和 x64 平台上实现。
对于每个指令集,均有少量函数不会调用其他函数且由编译器(所谓的叶函数)进行高度优化,同时 FBT 无法检测这些函数。 DTrace 中不存在针对这些函数的探测。
命令会列出可用于 nt 模块的所有探测及其参数。 使用调试器 lm(列出已加载模块)命令可列出所有可用模块。
使用 DTrace PID 提供程序可跟踪用户模式进程(如 Web 浏览器或数据库)的内部执行情况。 此外,还可在进程启动时附加 DTrace,以便调试进程启动问题。 作为 PID 定义的一部分,可指定在进程中定义的函数以及函数内的特定偏移量(或是,使用通配符 (*) 的所有偏移量)。 PID 提供程序要求在脚本执行时启动或运行二进制文件。
此示例命令显示了有关与 notepad.exe 关联的 PID 中的特定调用的信息。 使用调试器 lm(列出已加载模块)命令可列出所有可用模块。
讯享网
用户可通过 DTrace 命令与 DTrace 交互,而该命令会充当 DTrace 引擎的前端。 D 脚本会在用户空间中编译为中间格式 (DIF) 并发送到 DTrace 内核组件以供执行,而它有时也被称为 DIF 虚拟机。 它会在 dtrace.sys 驱动程序中运行。
Traceext.sys(跟踪扩展)是一种 Windows 内核扩展驱动程序,它允许 Windows 公开 DTrace 依赖其来提供跟踪的功能。 Windows 内核在堆栈查核行程或内存访问期间可提供标注,而跟踪扩展随后会实现这些标注。
- 检查是否正在运行受支持的 Windows 版本。 版本 18980 和 Windows Server 内部版本 18975 之后的 Windows 20H1 Insider 内部版本支持 DTrace 的当前下载。 在较旧版本的 Windows 上安装此版本的 DTrace 可能会导致系统不稳定,因此不推荐。 (适用于 19H1 的 DTrace 存档版本已不再可用,且不再受支持。)
- 从 Microsoft 下载中心下载 MSI 安装文件(在 Windows 上下载 DTrace)。
- 选择“完成安装”。
- 使用 bcdedit 命令在此计算机上启用 DTrace。
讯享网
更新到新的 Windows Insider 内部版本时,需再次设置 dtrace bcdedit 选项。
通过将“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlDeviceGuardEnableVirtualizationBasedSecurity”设为 1 来启用 VSM 和安全内核,从而在计算机上配置 VSM(虚拟安全模式),以便启用内核函数边界跟踪 (FBT)。
为此,请使用 REG Add 命令,如下所示:
某些 DTrace 命令会使用 Windows 符号。 若要使用 Windows 符号,请创建符号目录并设置符号路径:

讯享网
有关符号路径的详细信息,请参阅 Windows 调试器的符号路径。
若在 VM 上运行 DTrace,则请使用以下 PowerShell 命令在支持 VM 的计算机上启用嵌套虚拟化。 为在其中运行 DTrace 的 VM 提供 。 以管理员身份打开 PowerShell 窗口。
重新启动支持 VM 的电脑。
使用 -l 选项可列出活动探测。 如果 DTrace 处于活动状态,则应为 etw 和系统事件列出大量探测。
以管理员身份打开 Windows 命令提示符,以便输入 DTrace 命令。
讯享网
如果仅列出了这三个探测,则当前所加载的 DTrace.sys 驱动程序出现问题。
首先,从管理员命令提示符运行这些命令。
此命令会按程序显示 syscall 摘要并持续 5 秒钟。 tick-5sec 参数会指定时间段。 exit(0); 可让该命令在完成后退出,并返回到命令提示符。 使用 可指定输出。它会显示进程 ID (PID)、可执行文件名称和某一计数并持续 5 秒钟。
讯享网
以下命令会汇总计时器设置/取消调用,并持续 3 秒钟:
这些命令会利用 Windows 符号,并要求按安装部分的所述方法来设置符号路径。 按先前在安装中提及的方法创建一个目录,并使用以下命令设置符号路径。
讯享网
此示例命令会显示顶级 NT 函数。
此命令会转储 SystemProcess 内核结构。
讯享网
此命令会显示过去 10 秒的顶级内核堆栈。
此命令会显示启动期间 notepad.exe 所调用的顶级模块。 -c 选项会运行指定的命令 (notepad.exe),并在完成后退出。
讯享网
DTrace Windows 编程
DTrace ETW
DTrace 实时转储
DTrace Windows 代码示例

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/144749.html