本文档记录了 PowerToys 项目中可用于开发者诊断和解决问题的各种调试工具和机制。这些工具可帮助收集诊断信息、分析代码行为以及生成报告以进行故障排除。有关从源代码构建 PowerToys 的信息,请参阅 从源代码构建。
PowerToys 提供了多种设施来帮助进行调试和诊断问题
来源
PowerToys 支持多种构建配置,以方便调试
| 配置 | 平台 | 描述 |
|---|---|---|
| 调试 | x64 | 禁用优化,包含调试信息 |
| 调试 | ARM64 | 禁用优化,包含调试信息 |
| 发布 | x64 | 优化速度,调试更困难 |
| 发布 | ARM64 | 优化速度,调试更困难 |
Debug 配置包含对调试有用的额外信息
_DEBUG这些配置定义在项目属性文件中,特别是在 Cpp.Build.props 中。
来源
PowerToys 使用 Microsoft 本机代码分析和 C++ Core Guidelines 规则进行静态代码分析。这可以在潜在问题演变成运行时 bug 之前进行早期检测。
规则集配置在 CppRuleSet.ruleset 中,该文件启用特定规则并禁用其他规则。代码分析在构建时和 PR CI 中运行(但在发布 CI 中不运行)。
代码分析的关键设置
来源
BugReportTool 是一个命令行实用程序,用于收集有关 PowerToys 安装的全面诊断信息,以协助进行故障排除。它可以在安装目录中找到 PowerToys.BugReportTool.exe。
该工具可以通过一个可选参数运行,指定在哪里保存生成的 ZIP 文件
PowerToys.BugReportTool.exe [output_zip_path]
如果未提供路径,则默认将 ZIP 文件保存在桌面。
BugReportTool 收集以下信息
%LOCALAPPDATA%\Microsoft\PowerToys\logs 的日志BugReportTool 具有内置功能,可以在创建报告之前审核敏感信息
这由 HideUserPrivateInfo 函数处理,该函数
<private_data> 占位符来源
PowerToys 实现了一个全面的日志系统,用于捕获运行时事件、错误和诊断信息。日志主要在 Logger 类中实现。
日志记录可以按不同级别进行
日志存储在 %LOCALAPPDATA%\Microsoft\PowerToys\logs\ 中,并且包含在 BugReportTool 生成的错误报告中。
日志文件可以进行分析以了解
来源
Windows 事件查看器日志提供了有关 PowerToys 崩溃和其他系统级事件的关键信息。BugReportTool 包含提取相关事件的功能。
BugReportTool 中的 EventViewer 类收集来自 Windows 事件日志系统、与 PowerToys 进程相关的应用程序日志。它查询过去 10 天的事件,并将其格式化为 XML 以便分析。
来源
PowerToys 因各种功能与 Windows 注册表进行交互,调试通常需要检查注册表状态。BugReportTool 包含全面的注册表分析功能。
该工具收集与 PowerToys 相关的特定注册表项的信息,包括:
这由 ReportRegistry 和 ReportCompatibilityTab 函数处理,它们查询注册表并将结果格式化以供分析。
来源
由于许多 PowerToys 实用程序都与显示器和屏幕交互,因此调试工具包中包含专用的监视器诊断功能。
此工具收集有关连接显示器的详细信息
BugReportTool 还通过 ReportMonitorInfo 函数包含更轻量级的监视器诊断版本,该函数收集
来源
PowerToys 包含一个可能引起问题的更新系统。存在专门的调试机制用于诊断与更新相关的问题。
更新系统基于状态机,根据版本检查、下载状态和安装进度在不同状态之间转换。调试此系统通常涉及检查日志以及使用 BugReportTool 收集状态信息。
更新系统调试的关键组件
UpdateState 类中的更新状态跟踪IsMeteredConnection() 进行网络连接检查来源
PowerToys 使用吐司通知系统与用户进行通信。调试通知问题需要理解通知架构。
notifications 命名空间提供了显示、更新和删除吐司通知的功能。在调试通知问题时,可以检查这些组件
来源
每个 PowerToys 模块可能有特定的调试技术。例如,快捷指南模块为叠加窗口和缩略图渲染提供了专门的调试。
快捷指南模块使用 D2DOverlayWindow 进行渲染。调试此模块时,请关注
来源
有几个可执行的工具可用于调试 PowerToys
| 工具 | 用途 | 描述 |
|---|---|---|
| PowerToys.BugReportTool.exe | PowerToys.BugReportTool.exe [output_path] | 收集全面的诊断信息 |
| PowerToys.Update.exe | 由运行器内部使用 | 处理更新安装过程 |
| PowerToys.exe -debug_trace | 以启用调试跟踪的方式运行 | 启用更详细的日志记录 |
来源
PowerToys 包括一个实用函数 exec_and_read_output,它允许捕获命令行工具的输出以用于调试目的。BugReportTool 在此函数用于收集已安装的 .NET 运行时信息。
此函数可用于
来源
PowerToys 提供了一套强大的调试工具,可帮助开发人员诊断和修复整个应用程序中的问题。从全面的 BugReportTool 到用于监视显示器和分析注册表状态的专用实用程序,这些工具构成了一个完整的调试生态系统。
遇到 PowerToys 问题时,请从适当的调试配置开始,使用日志系统跟踪问题,并在必要时使用 BugReportTool 收集诊断信息。对于特定于模块的问题,请参考特定于该模块的专用调试技术。