发行说明

带有放大镜检查位的 WinDbg 徽标。

本主题提供有关 WinDbg 中的新增功能的信息。 早期版本以 WinDbg 预览版的形式发布。

1.2409.17001.0

辅助功能修复

我们修复了使用屏幕阅读器与 WinDbg 交互时出现的几个问题。

Bug 修复

  • 修复了卸载 WinDbgX 会阻止启动经典 WinDbg 的问题。
  • 修复了 WinDbgX 在启动期间出现后重设大小的问题。

时间旅行调试 (TTD)

  • 更新到版本 1.11.429。
  • 有关详细信息,请参阅 TTD 发行说明

1.2407.24003.0

新增功能

新的 JavaScript 脚本提供程序

我们现在发布了一个基于 V8 的向后兼容的 JavaScript 提供程序。 因此,arm64 主机现在可以使用 JavaScript 扩展。 arm64 UI 现在也默认为 arm64 引擎。

默认情况下,所有体系结构上都启用了新提供程序。 在 x86 和 x64 上,可以通过 .veighton.veightoff 命令打开/关闭它。 将来的某个时候,这些命令和旧版 JavaScript 提供程序将被删除。

带有扩展库清单的调试器扩展现在可以将图标添加到 WinDbg 功能区的新“扩展”选项卡中。 单击这些图标将触发给定数据模型查询的可视化效果。 这种可扩展性通过在扩展库清单中添加视图来实现。 视图将名称和图标的耦合绑定到数据模型查询和视图类型。 可以在扩展库清单文档中找到文档

现在可以根据特定的异常参数值有条件地加载库扩展。 有关详细信息,请参阅扩展库清单文档

配置选项,永远不下载特定的符号

现在,你可以跳过下载指定图像的符号。

DbgX.xml 配置文件的 Symbols 部分中,可以添加符号列表:

<Namespace Name="DisabledSymbolsDownload">
  <Setting Name="MSEdge.dll" Type="VT_BSTR" Value=""></Setting>
</Namespace>

在调试器中,可以运行 dx Debugger.Settings.Symbols.DisabledSymbolsDownload 以查看当前未下载的符号列表。

还可以直接从调试器更改列表,如下所示:

dx @$curprocess.Modules[1].DisableSymbolDownload()
dx @$curprocess.Modules[1].EnableSymbolDownload()

为了帮助调试基于嵌入式 SourceLink 下载源的问题,现在可以使用命令 !lmsourcesinfo module 显示调试器将使用的 SourceLink 的内容。

常规 UI 改进

我们对窗口(如模块窗口或堆栈窗口)进行了一些小改进:

  • 现在,可以通过单击标题列对网格视图进行排序。
  • 有更多的右键单击操作可用。
  • 堆栈窗口在适当的时候将帧显示为内联。

Bug 修复

  • 修复了大于 4GB 的 PDB 无法通过 HTTP 下载的问题。
    • Edge 就是这样一个 PDB 的示例。
  • 修复了调试器凭据提供程序中的缓存问题(现在它将为每个站点缓存凭据)。
  • 修复了评估扩展库加载触发器期间的错误。
  • 修复了 !address 中可能导致崩溃的错误。
  • !heap -a -a 现在应正常工作。

TTD

有关 1.11.410 版本,请参阅 TTD 发行说明

1.2402.24001.0

新增功能

实时 Linux 调试

现在可以实时调试 Linux 进程。 有关详细信息,请参阅以下主题:

Linux 实时远程进程调试

Linux 符号和源

在可预见的将来,WinDbg 客户端仍需要 Windows,因为 WinDbg 不能在 Linux 上运行。

使用时间旅行调试记录执行子集

现在,可以指定要记录的模块列表,以便将 TTD 集中在关心的模块上。 这可以大大减少记录开销。 若要使用此功能,只需在“配置和记录”对话框中选中“记录执行子集”,然后指定要记录的模块。 (请参阅下面的已知问题)。

为了更好地控制,可以使用一个新的进程内记录 API 来精确地记录程序。 请参阅我们的示例代码文档

紧凑型寄存器窗口

新的寄存器窗口看起来就像 r 命令的输出。 请注意,尚不支持从新寄存器窗口进行编辑。

e(输入值)的新参数写入内存命令

e(输入值)到内存命令现在支持物理地址,就像 d(显示内存)命令一样。 请注意,这些选项仅在内核模式下受支持:

选项 说明
/p 使用物理内存地址显示。 Range 指定的范围将取自物理内存而不是虚拟内存。
/p[c] /p 相同,只是将读取缓存内存。 必须包含 c 前后的括号。
/p[uc] /p 相同,只是将读取未缓存内存。 必须包含 uc 前后的括号。
/p[wc] /p 相同,只是将读取写入组合内存。 必须包含 wc 前后的括号。

有关详细信息,请参阅 e、ea、eb、ed、eD、ef、ep、eq、eu、ew、eza(输入值)

缺陷修复

  • 在 Linux 调试中支持 Rust 名称拆分
  • 改进了 CLR 调试
    • 添加强制混合模式堆栈遍历 CLR 帧的能力
      • config.xmlDbgX.xml 中添加了 ForceMixedModeStackWalker 设置。
      • 添加了用于一次性调查或无法更改配置设置的 !forceclrmixedmodeunwind 命令。
  • Linux 上 CLR 调试的一般改进
  • 修复了关于 LinuxKernel.js 和每个 cpu 变量的一些问题
    • 在 LinuxKernel.js 中添加了 !runq 命令,以便能够转储每 cpu 内核计划程序运行队列(形式类似于 Linux 崩溃实用工具的 runq 命令)
    • 修复了 LinuxKernel.js 中与内核更改相对应的各种命令:在较新的内核中,计时器树使用缓存的 RB 节点而不是原始 RB 节点;在较新的内核中,all_bdevs 列表已不复存在,所以块设备现在是从超级块中遍历的 (blockdev_superblock)
  • 各种 natvis 修复,更像 Visual Studio 的最新版本
  • 首选 sourcelink 与旧 sourceinfo
    • 添加了 !lmsourcesinfo <module> 命令来显示来自 pdb 的源链接流(以帮助调试源链接问题)。

已知问题

当使用 TTD 指定要记录的模块列表时,指定多个模块在此版本中不起作用。

1.2308.2002.0

许多错误修复和小改进。

1.2306.12001.0

许多错误修复和小改进。

1.2303.30001.0

注意

调试器已从 WinDbg 预览版重命名为 WinDbg

Windows 调试工具一起发布的旧版调试器将被称为 WinDbg(经典版)

ARM64 上的时间旅行调试

WinDbg 不仅在 ARM64 上本机运行,我们还启用了本机 ARM64 进程的时间旅行调试 (TTD)。 现在,即使在 x64 计算机上,你也可以记录本机 ARM64 进程(以及 x86 和 ARM32 进程)并轻松调试它们。 ARM64 设备上尚未支持 x64 或启用 x64 的 (ARM64EC) 进程。

总体 TTD 性能也得到了提高,使用通用 SIMD 指令的进程的记录开销大大减少。 总共优化了 65 条新指令,范围从 MMX 到 SSE 4.2、AVX 和 AVX2。

不明确的断点解析

不明确的断点允许调试器在某些断点表达式解析为多个位置的特定情况下设置断点。 有关详细信息,请参阅不明确的断点解析

1.2107.13001.0

WinDbg 预览版搜索现在包含使用正则表达式 (Regex) 进行搜索的选项。 通过执行 Ctrl+F 在要搜索的窗口中启用 Regex,然后切换搜索框旁边标记为 .* 的按钮。

受限模式

受限模式是一个可选设置,可以将 WinDbg 预览版可以启动的调试会话类型限制为仅远程调试会话和转储文件。 有关详细信息,请参阅 WinDbg - 受限模式

隐藏的变量支持

在以前的版本中,当试图计算 (??) 或显示 (dx) 一个与作用域中的另一个变量同名的变量时,WinDbg 会抛出“符号不明确”错误。 Windbg 现在将通过在变量名后附加 @n 来消除共享相同名称的变量的歧义。 例如:foo@0、foo@1

此更改也会反映在“局部变量”窗口中。 以前,只会显示作用域中最近的变量。

1.2104.13002.0

WinDbg 预览版的一个便捷工作效率功能是能够在命令窗口中检测模式。 为此,选择任何文本,并突出显示该文本的所有其他实例。 由于这种突出显示在查看内存模式时很有用,因此现在它也会突出显示其他基数中的等效数字,无论数字是以十六进制、十进制还是科学记数法格式化。 有关编号方案的详细信息,请参阅 n(设置基数)

示例:

选择 0x000001e2fb3f6160 时,无论格式如何,所有其他实例都会突出显示。

WinDbg 命令窗口的屏幕截图,突出显示了多种数字格式。

此功能也适用于半临时突出显示。 Ctrl + 双击数字以突出显示其所有实例。 可以通过这种方式在整个命令历史记录中跟踪多个重要数字(若要清除突出显示,请按住 Ctrl 键并再次双击该数字)。 最后,使用 Ctrl + F 搜索数字时,此功能也适用。

源代码扩展访问

源路径命令 .srcpath, .lsrcpath(设置源路径)已更新为包含一个新标记 – DebugInfoD。 有关详细信息,请参阅源代码扩展访问

数据模型中 WOW 进程的主机和来宾状态

当从 64 位上下文调试 32 位 WOW 进程时,用户现在可以访问数据模型中的主机和来宾状态。

32 位来宾状态示例:

dx @$curprocess.Environment

dx @$curthread.Environment

dx @$curthread.Stack

64 位主机状态示例:

dx @$curprocess.NativeEnvironment

dx @$curthread.NativeEnvironment

dx @$curthread.NativeStack

Javascript 调试改进

现在,可以使用 .scriptdebug 命令在控制台中直接调试加载在 UI 中的 Javascript。 有关详细信息,请参阅 JavaScript 调试器脚本 - JavaScript 调试

辅助功能改进

通过 WinDbg 预览版,我们致力于构建一个包容残障工程师的调试器,并不断改进辅助功能。 我们做出了以下改进。

  • 现在可以通过键盘 (Shift+Enter) 单击命令窗口链接
  • 改进了主菜单的键盘导航
  • 改进了功能区的键盘导航
  • 增加了 UI 元素的对比度

时间旅行调试器的新“覆盖”数据访问类型

时间旅行调试器 (TTD) 现在提供一种“覆盖”数据访问类型。 像 dx $@cursession.TTD.Memory() 这样的内存查询现在有一个额外的列显示旧的写入值。

其他修复、改进和更新

  • 添加了一项功能,当内核调试主机和目标都是 USB 3.1 控制器时,可以自动检测并应用 USB 3.1 硬件问题的解决方法。
  • 添加了新的 UI 快捷方式:Ctrl + Shift + 单击 DML 链接将其复制到剪贴板

1.0.2007.01003

时间线书签

在 WinDbg 中为重要的时间旅行位置添加书签,而不是手动将位置复制粘贴到记事本。 通过书签可以更轻松地查看跟踪中相对于其他事件的不同位置,并对其进行注释。

可以为书签提供描述性名称。

显示“显示问候语”应用中第一个 API 调用的示例名称的新书签对话框。

通过查看>时间线中提供的时间线窗口访问书签。 将鼠标悬停在书签上时,将显示书签名称。

WinDbg 时间线的屏幕截图,其中包含三个书签和一个显示书签名称的工具提示。

可以选择并按住(或右键单击)书签以移动到该位置,也可以重命名或删除书签。

书签右键单击弹出菜单的屏幕截图,其中包含定位、编辑和删除选项。

“模块”窗口

新窗口显示模块及其相关信息,可通过“视图”功能区访问。 其中显示:

  • 包括路径位置的模块名称
  • 加载模块的大小(以字节为单位)
  • 加载模块的基址位置
  • 文件版本

WinDbg“模块”视图窗口的屏幕截图,显示五个列出的模块。

实时调试中可用的线程名称/说明

执行实时用户模式调试时,现在可以使用从 SetThreadDescription 设置的线程名称。 使用“~”命令或调试器数据模型可以获得线程名称。

0:000> ~
   0  Id: 53a0.5ffc Suspend: 1 Teb: 000000b1`db1ed000 Unfrozen "Hello world!"
   7  Id: 53a0.9114 Suspend: 1 Teb: 000000b1`db1ef000 Unfrozen
   8  Id: 53a0.2cc4 Suspend: 1 Teb: 000000b1`db1f1000 Unfrozen
   9  Id: 53a0.5c40 Suspend: 1 Teb: 000000b1`db1f3000 Unfrozen

0:000> dx @$curthread
@$curthread                 : ConsoleTestApp!ILT+25(mainCRTStartup) (00007ff7`fac7101e)  [Switch To]
    Id               : 0x5ffc
    Name             : Hello world!
    Stack
    Registers
    Environment

可移植 PDB 支持

添加了可移植 PDB 支持。 可移植 PDB(程序数据库)格式描述由公共语言基础结构 (CLI) 语言编译器生成并由调试器和其他工具使用的调试信息的编码。 有关详细信息,请参阅可移植 PDB 符号

其他更改和错误修复

  • WinDbg 现在支持 AMD64 和 Linux 内核转储调试。
  • 时间旅行记录增强功能和其他修复。

1.0.1912.11001

TTD 时间线 - 我们添加了一个新窗口,可显示跟踪中的重要事件:异常、断点、函数调用和内存访问。 时间线将自动打开并显示异常(如果存在)和断点。 有关详细信息,请参阅 WinDbg 预览版 - 时间线

已切换到默认窗口部件版式 - 我们使用的自定义窗口部件版式虽然更漂亮,但给很多人带来了一些缩放和调整大小的问题,所以我们选择暂时删除它。

文件菜单改进了键盘导航 - 文件菜单现在更容易导航,只需一个键盘。

其他更改和错误修复

  • 当目标正在运行时,堆栈和局部变量窗口现在将被禁用;如果没有目标,则不会显示“未指定的错误”。
  • 在“附加”对话框中添加了“服务”列,以便轻松查找正在运行的服务。
  • 修复了在启动带有参数的应用程序时导致体系结构检测不起作用的错误。
  • 反汇编窗口改进了加载专用符号时的反汇编。
  • jsprovider.dll 现在会自动加载,因此我们从脚本功能区中删除了“加载 JSProvider”按钮。

1.0.1908.30002

TTD 调用对象的改进 - 调用查询现在包括参数名称、类型和值。 在跨跟踪查询函数调用时,你可以获得完全类型化的参数及其值,从而可以轻松地按参数筛选结果。

对 Open Enclave 的支持 - WinDbg 预览版现在可以调试 Open Enclave (OE) 应用程序,有关详细信息,请参阅 Open Enclave 调试)。

ELF 核心转储 - 作为支持 Open Enclave 的一部分,WinDbg 可以从 Enclave 和 Linux 应用程序打开 ELF 核心转储和二进制文件以及 DWARF 符号(目前不支持 DWARF 5)。 从非 Windows 应用程序打开核心转储时,基本窗口和命令都正常工作,但大多数扩展和特定于 Windows 的命令将不起作用。 ELF 和 DWARF 文件将按照此处定义的键约定从符号服务器下载。 Enclave 是唯一受支持的方案,但我们对打开其他 Linux 核心转储的反馈持开放态度。

TTD 文件格式更改 - 我们对 TTD 跟踪的文件格式进行了重大更新,这破坏了向前兼容性。 以前版本的 WinDbg 预览版将无法打开使用此(和未来)版本的 WinDbg 预览版的跟踪,但此(和将来)版本将能够打开新旧跟踪。

其他更改

  • TTD 现在将使用 64 位引擎进行索引编制,使用适当的调试器引擎位进行重播,以最大程度地减少索引编制时的潜在内存问题和重播时的 SOS 问题。
  • 运行不带任何参数的“dx”现在将显示根命名空间,以便于浏览。
  • 现在,可以通过设置菜单修改默认符号和源缓存位置。
  • 改进了对 AVX-512 的记录支持(记录 AVX-512 会导致比正常情况更大的速度减慢)。
  • 我们启用了脱机许可

1.0.1905.12001

对 SymSetDiaSession 错误缓解的改进 - 我们上个月为减轻应用程序将 DbgHelp 注入我们的流程所导致的错误而进行的修复在某些情况下仍然不起作用。 我们已经对其进行了改进,并将继续监视有关此错误的反馈。

主题色自定义 - 很多方案都需要打开多个 WinDbg 实例,在它们之间来回移动可能会令人困惑,需要一些时间来弄清楚哪一个是“正确的”实例。 我们添加了更改蓝色主题色的功能,以帮助在视觉上区分会话,并使会话之间的交换更容易。

只需选择视图功能区,然后在最后一部分中选择主题色选项。 当从最近的目标启动未来的会话时,主题色将作为目标工作区的一部分保留。

源令牌化改进 - 源代码窗口现在基本支持标记 Rust 源文件和 C++ SEH __try/__except/__finally/__leave。

协同例程改进 - 改进了对协同例程局部变量和某些优化变量的支持。

默认符号和源缓存设置 - 在调试设置下的“设置”菜单添加了一个选项,用于更改符号的缓存位置。 注意 - 存在一个已知问题,将此留空会导致源代码加载失败。 我们将添加验证,以防止在将来的版本中发生这种情况。

-pv 修复 - 修复了一个可能阻止 -pv(非侵入性连接)在某些情况下工作的错误。

1.0.1904.18001

修复了 SymSetDiaSession 错误 - 一段时间以来,我们收到了一个错误的报告,该错误在某些情况下阻止了 WinDbg 预览版的启动。 在加载之前,有一些外部应用程序试图将一个版本的 DbgHelp 注入到我们的进程中。 其中一些正在使用缺少功能的 DbgHelp 版本,这会在我们尝试使用这些功能时导致此错误。 我们已经为此添加了一个修复程序,并将跟踪是否仍有发生这种情况的情况。

字体控件 - 我们添加了控制字体和字体大小的设置。 有两种不同的设置,一种用于文本窗口(单间距窗口,如反汇编、源代码、命令等),另一种用于工具窗口(局部变量、堆栈等)。 仍有一些区域不受这些选项的影响,我们将在未来进行更新。

突出显示改进 - 命令窗口中文本的持久突出显示现在还会突出显示源窗口和注释窗口中的文本。

源加载改进 - 我们更改了加载源文件的工作原理。 以前,当打开源文件时,运行附加命令等引擎操作是不可能的,或者是不可预测的。 我们更改了加载发生的位置,以实现更好的并行性和更可靠的源代码开放操作取消。

其他更改和错误修复:

  • 在源代码窗口的上下文菜单中添加了“转到反汇编”。
  • 在反汇编窗口中添加了一个“遵循当前指示”复选框。
  • 修复了在输出大量文本时导致命令窗口执行缓慢的错误。
  • 更改了向上翻页和向下翻页键,以执行与 Visual Studio 类似的操作。
  • 当在源代码窗口中打开 ASM 文件时,现在将突出显示基本注释、字符串和指令

1.0.1812.12001

此版本包括这些更新。

调试器数据模型 C++ 标头 - Windows SDK 中包含了一个新的 C++ 标头 DbgModel.h,用于通过 C++ 扩展调试器数据模型。 可以在调试器数据模型 C++ 概述中找到详细信息。 此版本包括一个新的扩展,它为调试器数据模型添加了更多“API 风格”的功能,可以通过“dx”命令、JavaScript 和新的 DbgModel.h 标头访问这些功能。 此扩展扩展数据模型,包括有关通过 Debugger.Utility.Code 命名空间执行程序集和代码执行的知识,以及通过 Debugger.Utility.FileSystem 命名空间的本地文件系统。

综合类型扩展 使用此新的 API 扩展,我们在 GitHub 存储库中提供了一个新的示例 - https://github.com/Microsoft/WinDbg-Samples/tree/master/SyntheticTypes。 此 JavaScript 扩展读取基本的 C 标头文件,并为标头中定义的结构和联合定义综合类型信息。 通过 dx 命令,可以将内存视为结构化,就好像你拥有一个包含这些类型的类型信息的 PDB 一样。

其他更改和错误修复:

  • WinDbg 预览版现在将更智能地处理在单步执行时将源窗口或反汇编窗口带到前台的操作。
  • 重新安排了 WinDbg 预览版的窗口标题,以便在内核调试时在开始时提供更重要的信息。
  • 命令窗口中的交替背景对比度略显明显。

1.0.1810.2001

此版本包括这些更新。

  • 从“文件”菜单或“主页”功能区访问的“新设置”对话框。
  • 事件和异常设置对话框。 此菜单更改调试器处理事件和异常的方式,相当于“sx”命令或 WinDbg 的“事件筛选器”对话框。 在主功能区上选择设置,然后在左侧点击“事件和异常”进行管理。
  • 改进了 TTD 索引器,性能更好。 这提高了对 TTD 跟踪文件编制索引的性能,使索引过程更快(介于 2x-10x 之间),同时使索引文件更小(约小 50%)。 对于大小超过 4GB 的跟踪,或者使用具有多个 CPU 内核 (8+) 的计算机时,性能改进最为明显。 新的索引器使调试非常大的跟踪 (50GB+) 变得更加可行。
  • 新的 debugArch 启动标志,用于指定体系结构。 WinDbg 预览版尝试以正确位数启动调试器引擎,以更好地支持调试托管代码。 在某些情况下,它无法确定正确的位数,或者你可能想推翻它的决定。 使用 -debugArch x86|amd64 控制调试器引擎的体系结构。

其他更改和错误修复:

  • 修复了一个错误,该错误会导致在打开浮动窗口的全屏调试器上出现黑条。
  • 修复了一个会导致符号选项无意中被清除的错误。
  • 现在,从最近的目标启动时,命令历史记录会被保留。
  • 在数据模型窗口中,现在可以编辑值。
  • 未编制索引的 TTD 跟踪现在更清楚地表明它们未编制索引。
  • 改进了局部变量窗口的性能
  • 添加了一个功能区按钮,用于将命令窗口日志保存到文件中。
  • 已添加 。 SelectMany(<projection>) 作为默认的 LINQ 方法集。

1.0.1807.11002

此版本包括这些更新。

自动保存和加载断点。 这是替换工作区的第一步。 我们通过启用断点的保存和加载来启动该路由。 从文件菜单中的“最近访问”选项卡启动之前调试过的内容,现在将从该会话加载断点。 计划是扩展此功能,以在会话之间保留更多信息。 硬件断点 (ba) 和断点上的其他各种属性(如线程和进程特定的上下文以及条件)目前尚未保存。

细微更改和错误修复:

  • 添加了命令行选项 -x、-xe、-xd、-xn 和 -xi,用于控制异常和事件的处理。 这些命令行选项的行为就像它们的命令计数器部分一样。
  • 注释窗口现在支持粗体、下划线和斜体格式。
  • 修复了某些缩放和滚动问题。
  • 在命令、内存、源或反汇编窗口中选择文本现在将在所选文本的其他实例上显示一个突出显示。
  • 修复了中断符号加载会导致会话剩余时间符号加载失败的错误。
  • NatVis 现在会在重启会话时正确重新加载。

1.0.1805.17002

此版本包括这些更新。

新的反汇编窗口 - 反汇编窗口现在包括:

  • 只要可能,向上或向下滚动将持续加载更多反汇编。
  • 数字、代码地址和操作码的语法突出显示。
  • 选择代码符号会将反汇编窗口跳转到该位置。
  • 将鼠标悬停在数字上将显示一个工具提示,用于将该数字转换为其他基数。
  • 表示函数开头的标头。

更快的源窗口 - 源窗口已更新,速度更快,资源效率更高。

细微更改和错误修复:

  • 修复了有关符号缓存的问题
  • 修复了当目标未被中断时,切换初始中断不可用的一些情况
  • 如果在命令窗口中按 tab 键,但没有任何可用内容,光标现在将停留在输入字段中
  • WinDbg 预览版现在将在打开 CAB 文件时自动检测位数

1.0.1804.18003

此版本包括这些更新。

符号状态和取消改进 - 有时调试器会显示 BUSY 加载符号,如果没有启用 !sym 干扰,很难确定它在做什么以及为什么。 我们更新了 WinDbg 预览版,以更好地传达加载符号时它正在执行的操作,以帮助排查任何问题。 除了可以很容易地看到发生了什么,我们还做了一些更改,使取消符号更加可靠,日志窗口将包含一些细节,通常是当启用 !sym 干扰的输出。 如果点击“视图 -> 日志”,你将获得完整的干扰符号加载输出,而无需打开它并尝试重新加载符号。

试验注释窗口 - WinDbg 预览版现在有一个用于做笔记的窗口。 只需点击“视图 -> 注释”即可打开。 如果复制/粘贴到其中,DML 链接将被保留,并且仍然像命令窗口一样工作。 你还可以在窗口打开时从“注释”功能区保存和加载注释文件。

试验更快的源窗口 - 为了帮助提高 WinDbg 预览版的性能,有一个实验性的新源窗口,它的效率要高得多。 在上下文菜单和语法突出显示方面仍然存在一些差距,但我们希望在完成之前让每个人都可以试用,以便尽早给我们反馈。 运行 $UseFastSourceWindow 以使用它。 如果要返回到旧版,请运行 $UseMonacoSourceWindow。 该设置将在会话之间保留,你需要关闭并重新打开源代码窗口以获取新版本。

JSProvider API 版本 1.2 - 对于声明支持 API 1.2 版的 JavaScript 扩展:

  • 退出脚本的任何具有 .compareTo 方法的对象都将有一个自定义比较器(比较运算符将在 DX 计算器和其他地方工作:例如:IModelObject::Compare)
  • 退出脚本的任何具有 .equals 方法的对象都将具有自定义相等运算符(== 和 != 将在 DX 计算器和其他地方工作:例如:IModelObject::IsEqualTo)
  • 进入脚本的本机或数据模型对象将对其具有 .compareTo 和 .equals,允许访问任何自定义比较器或自定义相等实现。

细微更改和错误修复:

  • .server 现在将列出完全限定的域名,以便在短名称出现域名问题时更容易使用。
  • Ctrl+G 现在可以在源代码窗口中工作。
  • 向反汇编窗口添加了地址栏。
  • WinDbg 预览版现在将以更可预知的方式处理 _NT_SYMBOL_PATH。
  • 添加了 -server 命令行选项。
  • TTD 数据模型查询现在可以逐步显示,因此,如果中断,仍会看到一些结果。 该功能仍处于试验阶段,是可选的。 执行 dx $@cursession.TTD.AsyncQueryEnabled = 1 命令启用。
  • “dps”命令现在具有指向其引用的源文件的链接。

1.1801.19001.0

此版本包括这些更新。

文本突出显示 - 现在,可以直接在调试器中突出显示所选文本的所有实例。 若要使用此功能,只需在命令窗口中选择一些文本,然后在命令功能区中选择“突出显示”或按 CTRL+ALT+H。 在已突出显示的文本上使用其中一个选项将删除突出显示。

如果喜欢使用命令,可以使用“$hl”命令:

$hl ["someValueHere"] - 突出显示给定文本(如果已经突出显示,则取消突出显示)

$hl clearAll – 清除所有突出显示的条目

$hl caseSensitive [1|0] - 将突出显示匹配设置为区分大小写或不区分大小写(默认设置为不区分大小写)

此版本还包括一些小错误修复。

1.1712.15003.0

此版本包括这些更新。

TTD 内存查询 - 现在,你可以向 TTD 查询内存访问,类似于现今查询调用的方式。 这样,你可以查找访问特定内存范围的所有读取、写入和执行。

读取和写入示例:dx $@cursession.TTD.Memory(startAddress, endAddress, "rw")

唯一执行示例:dx $@cursession.TTD.Memory(startAddress, endAddress, "ec")

设置更改 - WinDbg 预览版现在会自动保存会话之间的设置,包括符号路径和源路径。

JavaScript 改进

  • JavaScript 中的 64 位数字和数字现在包含一个模方法,允许真正的 64 位模运算。
  • JavaScript 中定义的对象现在可以实现自定义可比或等同的概念,该概念将在 dx 中使用标准 C++ 运算符或 LINQ 操作。 为了利用这一点,脚本必须在 initializeScript 数组中声明它支持主机 API 的新版本,方法是插入记录“new host.apiVersionSupport(1, 2)”。 完成后,可以在任何“dx”或数据模型窗口 LINQ 查询中使用这些函数。 如果该方法实现了 .compareTo(other),则具有可比性(比较运算符在 dx 和 LINQ 中工作)。 如果该方法返回负值,例如“this < other”。 如果该方法返回零,则表示“this == other”。 如果方法返回正值,则表示“this > other”。 如果该方法实现 .equals(other),则它是可等式的(== 在 dx 和 LINQ 中有效)。 该方法必须返回 true 或 false。

细微更改和错误修复:

  • 修复了启动调试期间堆栈和本地窗口不工作的错误
  • 更新了 LM 的输出,以更准确地报告 ProductVersion 和类似字段
  • 在 TTD 会话期间启用“后退一步”按钮
  • 添加了对 -lsrcpath 的支持
  • 局部变量窗口、监视窗口和模型窗口中的标题在向下滚动时不会消失
  • 当 ALT+Tabbing 返回 WinDbg 预览版时,命令窗口将正确保留光标位置
  • 添加了 CTRL+ALT+V 快捷键,用于切换详细模式
  • 现在,可以通过选择并按住命令窗口(或右键单击)命令窗口选项卡并选择“关闭自动滚动”来禁用命令窗口的自动滚动
  • 现在,可以通过启动可执行文件高级页面调试子进程。

1.0.14.0

此版本包括这些更新。

改进了进程服务器体验 - “文件”菜单中添加了一个新通知,显示你连接并与之交互的进程服务器 作为这些更改的一部分,在结束调试会话时,进程服务器连接将保持不变,并且可以在“文件”菜单中断开连接。

“视图”功能区中的新预设置布局选项 - “视图”功能区中有一个新的“布局”选项。 目前有三种布局:默认值布局、一个侧重于反汇编的布局和一个最小布局。

“时间旅行调试”功能区 - 调试时间旅行调试跟踪时,将显示一个增强的时间旅行功能区。

JavaScript 脚本中的元数据 - JavaScript 扩展现在可以返回属性和其他构造的元数据。 这意味着扩展可以提供帮助字符串、指示值的显示基数等。 元数据是通过在对象上放置元数据描述符,通过 Symbol.metadataDescriptor 的存在或对 host.metadata.defineMetadata 的显式调用来提供的。 函数返回、迭代值和其他值上下文可以通过 host.metadata.valueWithMetadata 返回其值的元数据。

JavaScript API 更新 - 对 JavaScript 提供程序中的 API 进行了一些潜在的源代码级重大更改(包括本机对象的新投影方法和属性)。 如果不表明现有扩展支持 JsProvider API 的新版本,它们将不会看到任何潜在的重大更改。 通过在 initializeScript 返回的数组中放置 host.apiVersionSupport 记录来指示对新 API 版本的支持,该数组声明支持版本 1.1。 也许? .. 该值表示支持版本 1.1。

API 版本 1.1 中的更改包括:

  • 如果 host.getModuleSymbol 和 host.getModuleType 找不到符号,则返回 null,而不是抛出异常。
  • 除了 .targetLocation 之外,所有本机对象都具有 address 属性。 如果对象没有地址,则在访问属性时将抛出异常。
  • 所有本机对象都具有新的 .getObjectValue 和 .setObjectValue 方法,以访问对象上的属性,这些属性可能与 JavaScript 在对象上放置的名称(例如:“address”)冲突。

其他 JavaScript 更改

  • JavaScript 扩展现在可以通过 Object.defineProperty 和 delete 运算符添加和删除数据模型对象的属性。 添加或注册 JavaScript 类作为父模型或类型签名仍然是操作对象模型的首选方法。
  • JavaScript 扩展现在可以通过新的 host.setModuleSymbol API 修改调试目标模块中的全局变量。
  • 64 位库类型上的所有数学函数(例如:.add、.subtract、.multiply、.divide 等)现在也存在于 JavaScript 数字上。
  • JavaScript 函数和属性现在可以通过自定义封送返回枚举的值。 函数或属性访问器可以返回 host.typeSystem.marshalAs(值、类型…),以调用此类自定义封送处理。
  • 脚本调试器中的断点命令现在除了行/列位置外,还可以在函数名称上中断。
  • JavaScript 扩展中的类型对象可以通过 .containingModule 属性访问其包含模块。

细微更改和错误修复:

  • 修复了条件功能区选项卡的格式设置,使其不那么令人困惑。
  • 重新设计了 DML,使其在解析时更加严格,以提高性能。
  • 对 CTRL+F 的性能和行为进行了各种修复。
  • 在尝试使用 TTD 之前,未提升运行时添加警告。
  • 添加了用于替代自动目标位数检测的选项。
  • 禁用各种无法使用的文件菜单和功能区选项(如转储文件中的“Go”)。

已知问题:

  • SOS 在 x86 跟踪上不起作用。

1.0.13.0

此版本添加了时间旅行跟踪。 时间旅行调试允许你记录一个过程,然后稍后向前和向后回播。 时间旅行调试 (TTD) 可以通过让你“倒带”调试器会话来帮助你更轻松地调试问题,而不必在发现错误之前重现问题。 有关详细信息,请参阅时间行程调试 - 概述

1.0.12.0

此版本是 WinDbg 预览版的第一个版本。 有关 WinDbg 预览版中提供的功能的一般信息,请参阅 WinDbg 的主要功能

另请参阅

WinDbg – 安装

WinDbg – 命令行启动选项