带有放大镜检查位的 WinDbg 徽标。
本文提供有关 WinDbg 中的新增功能的信息。 早期版本以 WinDbg 预览版的形式发布。
1.2510.7001.0
用户界面和体验改进
- 从功能区打开任何内存窗口实例
调试和性能增强功能
- 阻止窃取进程检测回调以提高调试可靠性
- 增强的时间旅行调试(TTD)变量历史记录,偏向使用表格格式以更好地实现数据可视化。
- 修复了重用生成器时变量历史记录中的崩溃,通过确保正确地捕获函数来解决这一问题。
- 用于处理更复杂的调试方案的不明确断点的增强计算器
- 修复了商店应用程序和 PLM 进程的空发布者列显示
TTD 和重播 API 更新
- 更新后的
!tt命令,当没有参数调用时,会提供一行帮助和当前位置,而不是自动移到跟踪开头。 - 为外部集成新增实验性 Replay API SDK 的使用权限
- 用于改进编程访问的增强变量历史记录数据模型方法
- 修复了各种 TTD 重播操作优化和回调支持改进
错误修复和稳定性
- 修复了一个错误,该错误导致错误报告错误地显示“错误:操作已成功完成”
- 解决了 fasttfgitview 命令中的主机 URL 处理问题
- 改进了与符号解析相关的错误信息,以提供更清晰的反馈。
- 修复了在 Linux 上为平面映射的 .NET 程序集加载 PDB 时出现的问题
- 解决了调试组件中未初始化读取的问题
- 修复了短文件名的扩展库文件搜索问题
1.2508.27001.0
新增功能
- 添加了一个选项,用于禁用 WinDbg 的图形硬件加速。
- 在 . 上
.AlternateFunctions添加了一个新<frame>.Attributes.SourceInformation属性。
Bug 修复
- 修复了打开对话框后“ 开始调试 ”页不会刷新的问题。
- 修复了标签菜单项的问题,这些菜单项连接到了无法通过 UI 自动化访问的设备。
- 修复了浏览命令历史记录时未提交的命令输入丢失的问题。
- 修复了鼠标滚轮处理以正确平滑滚动(具有平滑车轮和触控板的鼠标)。
- 修复了调用函数序幕
__SEH_prolog4时 32 位 x86 调试中的误导性递归分步行为。 - 修复了基于 NuGet 的插件库设置中的
.AllowNugetExeUpdate漏洞。 - 修复了在表和名称索引周围
.debug_names读取 DWARFv5 符号时的 bug。 - 更正了具有多个分步筛选调用的源行的分步行为。
- 修复了由无效
natvis版本字符串导致的崩溃。 - 修复了远程调试中用于
CreateProcessW远程调试的环境块传输。 - 修复了通过
!percpu在 Linux 内核中动态分配的 CPU 指针的!allpercpu和alloc_percpu命令。 - 修复了 Linux 内核调试会话中的 CPU 编号问题。
- 修复了非程序数据库(PDB)符号目标的反汇编窗口功能标签缺失问题。
- 修复了 ELF 二进制文件中占位符重定位的处理。
- 修复了 DWARF 符号处理中的双重释放错误。
- 修复了转储收集代码中的回归问题,该问题阻止了 x64-on-ARM64 模拟的进程的完整内存转储收集。
常规界面改进
- 改进了 WinDbg 在更换不同分辨率的显示器时恢复窗口位置的方式。 WinDbg 现在还会保存和还原贴靠位置。
- 按住 Shift 键时,使用鼠标滚轮实现水平滚动。
- 更新了 “打开文件夹 ”选取器以使用新式对话框。
1.2506.12002.0
新增功能
WinDbg 现在附带控制台模式调试器(cdb.exe/ntsd64.exe/kd.exe)。 为了避免各个二进制文件之间的歧义,并且不影响工具的现有副本,每个二进制文件都包括体系结构名称:
- cdbARM64.exe/cdbX64.exe/cdbX86.exe
- kdARM64.exe/kdX64.exe/kdX86.exe
- ntsdARM64.exe/ntsdX64.exe/ntsdX86.exe
更多功能:
- 可以通过命令自定义
$OpenDmoToolwindow数据模型工具窗口标题,也可以通过标题栏上下文菜单进行更改。 - 新的调试器设置,用于启用符号文件的并行 HTTP 下载。 此选项默认处于启用状态。
Bug 修复
- 修复了如何为通过命令行打开的转储文件保存目标路径(
-z),以便你可以从 “最近使用 ”菜单成功打开它。 - 修复了 脚本编辑器 窗口中的崩溃。
- 修复了 WinDbg 处理源文件中不一致行尾的方法,以在Source窗口中提供更一致的源文件视图。
- 修复了在使用新的并行下载功能时,不会为 HTTP 符号服务器续订凭据的问题。
- 修复了 JavaScript 扩展中未正确枚举数据模型对象的属性的问题。
- 修复了通过拖动重新排序时列文本消失的问题。
- 修复了在启动时未将通过命令行选项设置事件筛选应用于调试目标的问题。
- 修复了有时拖出工具窗口导致空白内容的问题。
- 修复了 ARM64 计算机上 X64 模拟进程的小型转储无法调试的问题。
- 修复了不明确断点导致调试器崩溃的问题。
- 修复了调试实时 Linux 进程时 GDBServer 在进程退出时崩溃的问题。
- 修复了与调试 JavaScript 扩展(
.scriptdebug包括更好的属性枚举和修复崩溃问题)相关的多个问题。
常规界面改进
- 将命令建议弹出窗口与光标对齐。 它现在仅显示建议的完成,而不是光标之前的所有内容。
- 提供了有关打开调试目标错误对话框的更多详细信息。 对于未能打开的转储文件,提供了一个指向该无法打开的 TSG 文件的超链接。
- 使工具窗口的标题栏具备与其停靠选项卡相同的上下文菜单。
- 对 局部变量、 监视和 模型 窗口进行了视觉改进。
- 已将时间旅行调试(TTD)更新为版本 1.11.532。 有关详细信息,请参阅 TTD 发行说明。
1.2502.25002.0
新增功能
命令窗口 IntelliSense
当第一个输入字符是 .(点)、!(感叹号)或 $(美元符号)时,命令输入提示会自动显示建议的完成。
还可以使用命令快捷方式 Ctrl+空格键调用建议。
快照调试
当 WinDbg 在本地调试实时进程时,它还可以拍摄进程的快照。 若要在快照和实时进程之间切换,请使用“ 扩展 ”选项卡上的图标。
同样,WinDbg 可以在不挂起进程的情况下,通过 snapshot:pid=<process pid in hex> 协议字符串附加到某个进程的进程快照上。
新的数据模型 API
Debugger.Utility.Symbols.GetTypeInformation返回与传入的任何对象关联的类型信息。 如果您希望获取指针(或引用)下的类型,可选参数允许自动解除引用(一级)。
Debugger.Utility.Control.CreateStepFilter(<Type>, <Pattern>)创建位于所有断点创建 API 旁边的命名空间中的新步骤筛选器。
Debugger.State.StepFilters返回具有属性
Id、Description、Type、Pattern和IsEnabled的步骤筛选器的列表。 步骤筛选器对象具有方法.Remove()。
改进了无需 clrcomposition.dll 的 CLR 调试体验
可再发行组件 dbgeng.dll 改进了公共语言运行时 (CLR) 帧的堆栈行走支持,而无需 clrcomposition.dll 存在。
随机改进
- 改进了对 Linux 内核调试的支持(尤其是针对 6.11+ 内核)。
- 添加了对 ZSTD 压缩 KDUMP 页面支持。
Bug 修复
- 已将服务器作系统 (SOS) 更新为版本 9.0.557512。
- 修复了加载 msdia140.dll 时检查吊销签名的性能回归问题。
- 修复了读取 XSTATE 上下文时的崩溃。
- 修复了 反汇编 窗口中禁用的断点突出显示,以便与启用的断点区分开来。
- 修复了关闭浮动工具窗口时发生的崩溃。
- 修复了打开最近跟踪后 时间线窗口 的当前位置未能始终填充的问题。
- 修复了 反汇编 和 内存 窗口中的问题,该窗口在输入新值后并不总是更新。
- 修复了深色主题中的标题栏配色方案。
- 修复了 “断点 ”窗口中延迟断点的呈现,其中 位置 显示
0x0,而不是创建时输入的原始表达式。 它还具有一个独特的图标,表明它未绑定。 - 修复了“ 局部变量 ”和“ 监视 ”窗口中的问题,即右键单击可见项会导致视图向上滚动。
- 修复了
natvis问题。 有关详细信息,请参阅 原始 bug 报告。 - 修复了
kd包含邮件Error getting port connector information的调试器垃圾邮件。 有关详细信息,请参阅 原始 bug 报告。 - 修复了当条件为 false 时
gc触发条件断点的问题。 - 修复了一个错误,使得在调试 TTD 跟踪时可以查看 YMM 和 ZMM 寄存器。
辅助功能修复
- 改进了 局部变量窗口、监视窗口和断点窗口的键盘导航。
- 改进了功能区和 局部变量、 监视和 断点 窗口的可视可读性。
- 改进了 局部变量、监视和断点窗口的屏幕阅读器可用性。
- 尽可能保留以前的键盘焦点、选择和滚动,以便在局部变量、监视和断点窗口中编辑项目。
- 改进了对 Windows 文本缩放的常规支持。
常规界面改进
- 添加了一个命令,用于将焦点从命令输入文本框移动到命令输出窗格作为切换标记模式(如命令提示符)。 快捷方式为 Ctrl+M。
- 向断点窗口添加了“转到反汇编”上下文菜单项。
- 在“
反汇编 ”窗口中,为 “运行到指令 ”、“ 设置指令指针 ”、“ 转到源 ”、“ 切换断点 ”和“ 切换断点 ”状态添加了上下文菜单。
时间旅行调试
- 已更新到版本 1.11.481。
- 有关详细信息,请参阅 TTD 发行说明。
1.2410.11001.0
重大变化
现在 dbghelp.dll 动态链接到 msdia140.dll。 此更改应仅影响重新分发 dbghelp.dll 的工具,而不包括 msdia140.dll。 包含 dbghelp.dll 的 NuGet 包还包括 msdia140.dll。
Bug 修复
- 修复了扩展库函数别名未绑定到加载触发器的问题。
- 修复了收到错误时
ERROR_INTERNET_SECURITY_CHANNEL符号存储不再失效的问题。 - 修复了无法为非英语键盘布局在 命令 窗口中键入反斜杠的问题。
- 修复了局部变量、监视和断点窗口中的编辑文本框在文本超过承载列时不会滚动到光标的问题。
- 对于 CAB 或 ZIP 转储,优先将 *.dmp(单个句点)置于 *.*.dmp(双句点)之前。
辅助功能修复
- 修复了通过键盘在局部变量和监视窗口中调整列大小的功能。
- 改进了 WinDbgX 中的键盘导航。
1.2409.17001.0
辅助功能修复
修复了使用屏幕阅读器与 WinDbg 交互时出现的几个问题。
Bug 修复
- 修复了卸载 WinDbgX 会阻止打开 WinDbg(经典版)的问题。
- 修复了 WinDbgX 在打开期间出现后重设大小的问题。
时间旅行调试
- 更新到版本 1.11.429。
- 有关详细信息,请参阅 TTD 发行说明。
1.2407.24003.0
新增功能
新的 JavaScript 脚本提供程序
现在,我们基于 V8 交付了一个新的后向兼容 JavaScript 提供程序。 因此,ARM64 主机现在可以使用 JavaScript 扩展。 ARM64 UI 现在也默认为 ARM64 引擎。
默认情况下,所有体系结构上都启用了新提供程序。 在 x86 和 x64 上,可以通过 .veighton 和 .veightoff 命令来开启或关闭它。 将来,我们计划删除这些命令和旧版 JavaScript 提供程序。
通过扩展库和数据模型实现 UI 扩展性
具有扩展库清单的调试器扩展现在可以向 WinDbg 功能区上的“新建 扩展 ”选项卡添加图标。 选择这些图标会触发特定数据模型查询的可视化效果。 扩展性是通过向扩展库清单添加 视图 来实现的。 视图将名称和图标的耦合绑定到数据模型查询和视图类型。 有关文档,请参阅 扩展库清单文档。
向扩展库异常加载触发器添加了异常参数
现在可以根据特定的异常参数值有条件地加载库扩展。 有关详细信息,请参阅 扩展库清单文档。
配置选项,永远不下载特定的符号
现在,你可以跳过下载指定图像的符号。
在 Symbols DbgX.xml 配置文件的部分中,可以添加符号列表:
<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 信息的新命令
为了帮助调试与基于嵌入式 SourceLink的源下载相关的问题,现在可以使用命令!lmsourcesinfo module来显示调试器所使用的SourceLink的内容。
常规界面改进
对 “模块 ”和 “堆栈 ”窗口等窗口进行了小改进:
- 标题列用于对网格视图进行排序。
- 可用的右键单击操作更多。
- 堆栈窗口在适当情况下将帧显示为内联。
Bug 修复
- 修复了 4 GB 以上的 PDB 无法通过 HTTP 下载的问题。 Edge 就是这样一个 PDB 的示例。
- 修复了调试器凭据提供程序中的缓存问题。 (现在,它缓存每个站点的凭据。
- 修复了扩展图库加载触发器评估过程中的错误。
- 修复了
!address中可能导致崩溃的错误。 - 已修复
!heap -a -a,使其现在正常工作。
TTD
请参阅版本 1.11.410 的 TTD 发行说明 。
1.2402.24001.0
新增功能
实时 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(输入值)。
Bug 修复
- 在 Linux 调试中新增对 Rust 名称解析的支持。
- 对 CLR 调试进行了改进:
- 添加了强制执行混合模式堆栈遍历 CLR 帧的功能。
- 向
ForceMixedModeStackWalker或config.xml添加DbgX.xml设置。 - 添加了
!forceclrmixedmodeunwind命令,用于临时调查或无法更改配置设置的情况。
- 向
- 添加了强制执行混合模式堆栈遍历 CLR 帧的功能。
- 对 Linux 上的 CLR 调试进行了常规改进。
- 修复了几个与
LinuxKernel.js和每个 CPU 的变量相关的问题。- 添加了
!runq命令到LinuxKernel.js,以便可以转储每个 CPU 内核调度器的运行队列(其格式类似于 Linux 崩溃工具的runq命令)。 - 修复了
LinuxKernel.js中的各种命令以对应内核更改。 在最近的内核中,计时器树使用缓存的 RB 节点,而不是原始 RB 节点。 在较新的内核中,all_bdevs列表消失了,因此块设备现在会从超级块blockdev_superblock中遍历。
- 添加了
- 进行了各种
natvis调整,以更接近 Visual Studio 的最新版本的方式运行。 - 首选
sourcelink相对于传统sourceinfo。-
!lmsourcesinfo <module>添加了命令以显示来自 PDBs 的sourcelink流(以帮助调试与sourcelink相关的问题)。
-
已知问题
指定使用 TTD 记录的模块列表时,指定多个模块在此版本中不起作用。
1.2308.2002.0
进行了许多 bug 修复和小改进。
1.2306.12001.0
进行了许多 bug 修复和小改进。
1.2303.30001.0
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
Regex 搜索
WinDbg Preview 的搜索功能现在包含一个使用正则表达式进行搜索的选项。 若要在要搜索的窗口中启用正则表达式,请选择 Ctrl+F。 然后切换搜索框旁边标记 .* 的按钮。
受限模式
受限模式是一种可选设置,它可以限制 WinDbg 预览版仅能启动远程调试会话和转储文件的调试会话类型。 有关详细信息,请参阅 WinDbg:受限模式。
隐藏的变量支持
在以前的版本中,WinDbg 在尝试求值??或显示dx时,会引发“符号歧义”错误,因为该变量在作用域中与其他变量同名。 WinDbg 现在通过在变量名称后追加 @n 来消解具有相同名称的变量的歧义。 示例包括 foo@0 和 foo@1
此更改也会反映在 “局部变量 ”窗口中。 以前,仅显示作用域中最近的变量。
1.2104.13002.0
智能号码选择和搜索
WinDbg 预览版的便捷的生产力功能是能够在 命令 窗口中识别模式。 若要检测模式,请选择任何文本,并突出显示该文本的所有其他实例。 查看内存模式时,此突出显示非常有用。 现在,它还会突出显示其他进制中的等效数字,无论这些数字采用十六进制、十进制或科学记数法的格式。 有关编号方案的详细信息,请参阅 n(设置基数)。
示例:
选择 0x000001e2fb3f6160时,无论格式如何,所有其他实例都会突出显示。
此功能也适用于半临时突出显示。 选择 Ctrl 并双击数字以突出显示其所有实例。 可以这样跟踪整个命令历史记录中的多个重要数字。 (若要清除突出显示,请选择 Ctrl 并再次双击数字。最后,通过选择 Ctrl+F 搜索数字时,此功能也有效。
源代码扩展访问
源路径命令 .srcpath,.lsrcpath (设置源路径) 已更新以包含新标记 DebugInfoD。 有关详细信息,请参阅 源代码扩展访问。
数据模型中 WOW 进程的主机和来宾状态
从 64 位上下文调试 32 位 WOW 进程时,现在可以访问数据模型中的主机和来宾状态。
32 位虚拟机状态示例:
dx @$curprocess.Environmentdx @$curthread.Environmentdx @$curthread.Stack
64 位主机状态示例:
dx @$curprocess.NativeEnvironmentdx @$curthread.NativeEnvironmentdx @$curthread.NativeStack
JavaScript 调试功能的改进
在 UI 中加载的 JavaScript 现在使用 .scriptdebug 命令在控制台中直接调试。 有关详细信息,请参阅 JavaScript 调试器脚本:JavaScript 调试。
辅助功能改进
借助 WinDbg 预览版,我们致力于构建一个面向残障工程师的调试器。 我们进行了以下辅助功能改进:
- 通过键盘使命令窗口中的链接可点击(按 Shift+Enter)。
- 改进了主菜单的键盘导航。
- 改进了功能区的键盘导航。
- UI 元素的对比度增加。
用于时间旅行调试的新覆盖数据访问类型
时间流调试现在提供Overwrite数据访问类型。 内存查询(例如 dx @$cursession.TTD.Memory())现在多了一列,显示写入的旧值。
其他修复、改进和更新
- 添加了一项功能,用于在内核调试主机和目标均为 USB 3.1 控制器时自动检测并应用 USB 3.1 硬件问题的解决方法。
- 添加了新的 UI 快捷方式:按住 Ctrl+Shift 并在 DML 链接上选择,能将它复制到剪贴板。
1.0.2007.01003
时间线书签
在 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 符号。
其他更改和 bug 修复
- 为 WinDbg 提供对 AMD64 和 Linux 内核转储调试的支持。
- 进行了时间旅行记录增强和其他修复。
1.0.1912.11001
- TTD 时间线:新窗口在跟踪中显示重要事件的可视表示形式:异常、断点、函数调用和内存访问。 时间线会自动打开并显示异常(如果存在)和断点。 有关详细信息,请参阅 WinDbg 预览版:时间线。
- 切换到默认窗口部件版式:我们使用的自定义窗口部件版式导致某些缩放和调整大小问题,因此我们暂时将其删除。
- 文件菜单改进了键盘导航:文件菜单更易于仅使用键盘进行导航。
其他更改和 bug 修复
- 在目标运行时禁用 Stack 和 局部变量 窗口,以便在没有目标时它不显示“未指定错误”。
- 向“附加”对话框添加了“服务”列,可帮助你轻松找到正在运行的服务。
- 修复了在使用参数打开应用程序时导致架构检测失效的一个bug。
- 加载专用符号时,改进了 反汇编窗口的反汇编 。
- 从脚本功能区中删除了 “加载 JSProvider ”按钮,因为现在会自动加载 jsprovider.dll。
1.0.1908.30002
- 对 TTD 调用对象的改进: 调用查询 现在包括参数名称、类型和值。 在查询函数调用的跟踪时,可以获取完全类型化的参数及其值。 借助此功能,可以轻松地按参数筛选结果。
- 对 Open Enclave 的支持:WinDbg 预览版现在可以调试 Open Enclave 应用程序。 有关详细信息,请参阅 “打开 Enclave 调试”。
- ELF 核心转储:作为支持 Open Enclave 的一部分,WinDbg 可以从 enclave 和 Linux 应用程序打开 ELF 核心转储和二进制文件,以及 DWARF 符号(当前不支持 DWARF 5)。 从非 Windows 应用程序打开核心转储时,基本窗口和命令都应正常工作,但大多数扩展和特定于 Windows 的命令都不起作用。 ELF 和 DWARF 文件从符号服务器下载,遵循 SSQP 密钥约定中定义的密钥约定。 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 修复:我们修复了一个 bug,该 bug 可能导致
-pv(非侵入式附加)在某些情况下无法正常工作。
1.0.1904.18001
- 针对 SymSetDiaSession 错误的修复:我们报告了一个错误,导致 WinDbg 预览版在某些情况下无法打开。 在加载 DbgHelp 之前,一些外部应用程序会尝试将 DbgHelp 版本注入进程。 其中一些正在使用缺少功能的 DbgHelp 版本,这会在我们尝试使用这些功能时导致此错误。 我们添加了此问题的修补程序,并计划跟踪此问题,以确定是否存在仍然存在此问题的情况。
- 字体控件:添加了用于控制字体和字号的设置。 有两种不同的设置:一个是用于文本窗口(单间距窗口,如 反汇编、 源和 命令),一个用于工具窗口(如 局部变量 和 堆栈)。 这些选项不会影响几个区域。 我们计划在将来更新它们。
- 突出显示改进: 命令 窗口中文本的持久突出显示现在还会突出显示 “源 ”和 “备注 ”窗口中的文本。
- 源加载改进:我们更改了加载源文件的工作原理。 以前,打开源文件时,不可能或不可预测地进行更多引擎操作。 我们更改了加载的位置,以实现更好的并行处理并更可靠地取消打开源的操作。
其他更改和 bug 修复
- 向“源”窗口的上下文菜单添加了“转到反汇编”。
- 在反汇编窗口中添加了“跟随当前指令”复选框。
- 修复了导致 命令 窗口在输出大量文本时执行缓慢的 bug。
- 已修改 Page Up 键和 Page Down 键,以执行与 Visual Studio 类似的功能。
- 已进行更改,使得在 源 窗口中打开 ASM 文件时,现在具有基本的注释、字符串和指令突出显示。
1.0.1812.12001
此版本包括以下更新:
-
调试器数据模型C++标头:有一个新的C++标头,包含在 Windows SDK 中,
DbgModel.h用于通过C++扩展调试器数据模型。 有关详细信息,请参阅 调试器数据模型C++概述。 此版本包括一个新的扩展,该扩展向调试器数据模型添加了更多的 API 样式功能,可通过命令、JavaScript 和新dx标头进行访问DbgModel.h。 此扩展扩展数据模型,包括有关通过 Debugger.Utility.Code 命名空间执行程序集和代码执行的知识,以及通过 Debugger.Utility.FileSystem 命名空间的本地文件系统。 -
合成类型扩展:使用此新的 API 扩展,我们在 GitHub 存储库上提供了一个新的示例。 此 JavaScript 扩展读取基本的 C 标头文件,并为标头中定义的结构和联合定义综合类型信息。 通过
dx命令,可以以结构化方式查看内存,就像具有这些类型信息的 PDB 一样。
其他更改和 bug 修复
- WinDbg 预览版现在更智能地处理在单步执行时将 源 窗口或 反汇编 窗口引入前台。
- WinDbg 预览窗口标题已重新排列,在内核调试时在标题开头显示更重要的信息。
- 命令窗口中的交替背景对比度应略显明显。
1.0.1810.2001
此版本包括以下更新:
- 添加了可从“文件”菜单或“主页”功能区访问的新“设置”对话框。
- 添加了事件和异常设置对话框。 此菜单更改调试器如何处理事件和异常,相当于
sx命令或 WinDbg 的事件筛选器对话框。 在 “开始” 功能区上,选择 “设置”。 然后在左侧菜单中,选择“ 事件”和“异常 ”来管理事件和异常。 - TTD 索引器的性能得到了改进,性能更加优越。 这种改进提高了对 TTD 跟踪文件编制索引的性能,这使得索引过程更快(在 2 倍到 10 倍之间),同时使索引文件更小(约 50% 更小)。 性能改进在处理超过 4 GB 的跟踪或使用具有 8 个以上 CPU 核心的计算机时最为明显。 新的索引器使调试大型追踪(50 GB+)更加便捷。
- 添加了用于指定体系结构的新
debugArch启动标志。 WinDbg 预览版尝试以正确位数启动调试器引擎,以更好地支持调试托管代码。 在某些情况下,它无法确定正确的位数,或者你可能想要覆盖它的决定。 使用-debugArchx86|amd64 控制调试器引擎的体系结构。
其他更改和 bug 修复
- 修复了一个错误,该错误导致在全屏调试器上出现黑条,当打开浮动窗口时。
- 修复了一个导致符号选项被意外清除的问题。
- 从最近的目标打开时,命令历史记录已保留。
- 数据模型窗口中支持编辑,现在可以在其中编辑值。
- 由于未编制索引,TTD 跟踪更加清晰。
- 改进了 “局部变量 ”窗口的性能。
- 添加了一个功能区按钮,用于将 命令 窗口日志保存到文件中。
- 将
. SelectMany(\<projection\>)添加到默认的LINQ方法集中。
1.0.1807.11002
此版本包括以下更新:
-
自动保存和加载断点:此步骤是替换工作区的第一步。 现在您可以保存和加载断点。 启动您之前从“文件”菜单的“最近使用”标签页调试的内容时,现在将加载该会话中的断点。 计划是扩展此功能,以在会话之间保留更多信息。 硬件断点(
ba)及其各种属性(例如线程和进程特定的上下文和条件)目前不会被保存。
次要更改和 bug 修复
- 添加了命令行选项
-x、-xe、-xd以及-xn-xi用于控制异常和事件的处理。 这些命令行选项的行为类似于其命令对应项。 - 在 “备注 ”窗口中添加了对粗体、下划线和斜体格式的支持。
- 修复了某些缩放和滚动问题。
- 支持在 命令、内存、源或 反汇编 窗口中选择文本时,现在会高亮显示所选文本的其他实例。
- 修复了中断符号加载导致会话其余部分符号加载失败的 bug。
- 修复了一个 bug,使 NatVis 在会话重启时能正确地重新加载。
1.0.1805.17002
此版本包括以下更新:
新的反汇编窗口:窗口现在包括:
- 在可能的情况下,向上或向下滚动会持续加载更多反汇编内容。
- 突出显示用于识别数字、代码地址和操作码的语法。
- 选择代码符号会将 反汇编 窗口跳转到该位置。
- 将鼠标悬停在数字上会显示一个工具提示,用于将该数字转换为其他基数。
- 使用标头表示函数的开头。
“更快的源”窗口: “源 ”窗口已更新为更快、更有资源效率。
次要更改和 bug 修复
- 修复了有关符号缓存的问题。
- 修复了在某些情况下,当目标未被打断时,初始中断切换功能无法使用的问题。
- 添加了支持,如果在 命令 窗口中选择一个没有内容的选项卡,光标将保留在输入字段中。
- 添加了支持, 使得 WinDbg Preview 在打开 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,这允许访问任何自定义比较器或自定义相等性实现。
- 具有
次要更改和 bug 修复
- 添加了支持,现在
.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声明它通过插入记录new host.apiVersionSupport(1, 2)支持主机 API 的新版本。 之后,可以在任何dx或数据模型窗口 LINQ 查询中使用这些函数。 如果该方法实现了.compareTo(other),那么它是可以进行比较的(比较运算符可以在dx与LINQ中使用)。 如果方法返回负值,则this < other为 。 如果方法返回零,则this == other为 。 如果该方法返回正值,则this > other为 。 如果该方法实现.equals(other),则它是公平的(==在dx和 LINQ 中工作)。 该方法必须返回 true 或 false。
次要更改和 bug 修复
- 修复了在引导调试过程中 堆栈 和 局部变量 窗口无法正常工作的 bug。
- 更新了 LM 的输出,以便更准确地报告
ProductVersion和类似的字段。 - 在 TTD 会话期间启用了 “退步” 按钮。
- 添加了对
-lsrcpath的支持。 - 修复了 “局部变量”、“ 监视”和 “模型” 窗口中的标头,以便在向下滚动时它们不会消失。
- 添加了支持,以便在使用 Alt+Tab 返回 WinDbg 预览版时, 命令 窗口会正确保留光标位置。
- 添加了用于切换详细模式的 Ctrl+Alt+V 快捷方式。
- 现在增加了支持,您可以通过选择并按住(或右键单击)命令选项卡,然后选择关闭自动滚动,来禁用命令窗口的自动滚动。
- 添加了支持,以便你现在可以通过启动可执行高级页面调试子进程。
1.0.14.0
此版本包括以下更新:
- 改进了进程服务器体验: “文件 ”菜单上的新通知显示连接到的进程服务器并与之交互。 作为这些更改的一部分,调试会话结束时,进程服务器连接仍然存在,你可以在 “文件 ”菜单上断开连接。
- 视图功能区上的新预设布局选项:“视图”功能区上提供了新的“布局”选项。 目前有三种布局:默认值布局、一个侧重于反汇编的布局和一个最小布局。
- 时间旅行调试功能区:调试 TTD 跟踪时会显示增强的时间旅行功能区。
-
JavaScript 脚本中的元数据:JavaScript 扩展现在可以返回属性和其他构造的元数据。 扩展现在可以提供帮助字符串、指示值的显示弧度等。 通过在对象上放置元数据描述符(存在
Symbol.metadataDescriptor或显式调用host.metadata.defineMetadata)来提供元数据。 函数返回值、迭代值和其他值上下文可以通过host.metadata.valueWithMetadata返回它们值的元数据。 -
JavaScript API 更新:对 JavaScript 提供程序中的 API 进行了一些潜在的源级破坏性更改(包括原生对象的新增投影方法和属性)。 如果不表明现有扩展支持 JsProvider API 的新版本,它们将不会看到任何潜在的重大更改。 通过在
host.apiVersionSupport返回的数组中放置initializeScript记录,并声明支持版本 1.1,以指示对新 API 版本的支持。
API 版本 1.1 中的更改
- 如果函数
host.getModuleSymbol和host.getModuleType找不到符号,它们将返回null,而不是引发异常。 - 所有本机对象都具有
.targetLocation之外的地址属性。 如果对象没有地址,则访问属性时将引发异常。 - 所有原生对象都有新的
.getObjectValue和.setObjectValue方法来访问对象的属性,这可能与 JavaScript 在对象上使用的名称冲突(例如,address)。
更多 JavaScript 更改
- JavaScript 扩展现在可以通过
Object.definePropertydelete 运算符添加和删除数据模型对象的属性。 添加或注册 JavaScript 类作为父模型或类型标识仍然是操控对象模型的首选方法。 - JavaScript 扩展现在可以通过新的
host.setModuleSymbolAPI 修改调试目标中的模块中的全局变量。 - 64 位库类型(例如,、
.add.subtract、.multiply和.divide)上的所有数学函数也存在于 JavaScript 数字上。 - JavaScript 函数和属性现在可以通过自定义封送返回枚举值。 函数或属性访问器可以返回
host.typeSystem.marshalAs(value, type…)以唤起此类自定义封送处理。 - 脚本调试器中的断点命令现在除了行/列位置外,还可以在函数名称上中断。
- JavaScript 扩展中的类型对象可以通过
.containingModule属性访问其包含的模块。
次要更改和 bug 修复
- 修复了条件功能区选项卡的格式设置,使其不那么令人困惑。
- 重新处理 DML 以更严格地进行分析以提高性能。
- 对 Ctrl+F 的性能和行为进行了各种改进。
- 尝试使用 TTD 前添加了一则警告,以非管理员权限运行时。
- 添加了用于替代自动目标位数检测的选项。
- 禁用了各种无法使用的“文件”菜单项和功能区选项(例如在转储文件中禁用的“Go”)。
已知问题
SOS 在 x86 跟踪上不工作。
1.0.13.0
此版本增加了时间旅行跟踪。 使用时光回溯调试,您可以记录进程,然后在之后向前或向后重播这些记录。 TTD 通过让你“倒退”调试器会话,而无需重现问题,从而帮助你更轻松地调试问题,直到发现 bug。 有关详细信息,请参阅 时间旅行调试:概述。
1.0.12.0
此版本是 WinDbg 预览版的第一个版本。 有关 WinDbg 预览版中可用的功能的一般信息,请参阅 WinDbg 的主要功能。