使用调试器标记语言

调试器命令可以使用纯文本或增强格式(使用调试器标记语言(DML)提供输出。 使用 DML 增强的输出包括可以单击以执行相关命令的链接。

DML 在 Windows 10 及更高版本中可用。

支持 DML 的命令

以下命令能够生成 DML 输出:

lmD 命令是一个能够提供 DML 输出的命令的示例。 lmD 命令显示已加载模块的列表。 如下图所示,每个模块名称都是一个链接,可以单击该链接获取有关该模块的更多详细信息。

调试器中 lmD 命令输出的屏幕截图。

下图显示了单击 usbuhci 链接的结果。 输出包含其他链接,可让你浏览 usbuhci 模块的更多详细信息。

调试器中 usbuhci 模块详细信息的屏幕截图。

打开和关闭 DML

.prefer_dml命令打开或关闭 DML。 启用 DML 时(.prefer_dml 1),能够生成 DML 输出的命令将默认生成 DML 输出。

控制台增强功能

所有 Windows 调试器现在都有支持 DML 分析的命令输出区域。 在 windbg 中,命令窗口支持所有 DML 行为,并显示颜色、字体样式和链接。 控制台调试器 ntsd、cdb 和 kd 仅支持 DML 的颜色属性,仅当在启用了颜色模式的 true 控制台中运行时。 使用重定向的 I/O、ntsd –d 或 remote.exe 会话的调试器不会显示任何颜色。

控制台调试器颜色模式

控制台调试器、ntsd、cdb 和 kd 现在能够在真实控制台中运行时显示彩色输出。 这不是默认设置,它要求通过tools.ini显式启用颜色模式。 tools.ini中的新col_mode <true|false> 标记控制颜色模式设置。 有关使用tools.ini文件的详细信息,请参阅 配置tools.ini

启用颜色模式后,调试器可以生成彩色输出。 默认情况下,大多数颜色未设置,而是默认为当前控制台颜色。

Windbg 命令浏览器窗口

在 Windows 10 及更高版本中,Windbg 命令浏览器窗口分析和显示 DML。 完全支持链接、<执行>和外观修改等<>所有标记。

若要使用 WinDbg 中的菜单启动命令浏览器会话,请选择“视图”和命令浏览器”。 命令窗口中的 .browse <命令> 将打开新的命令浏览器窗口并执行给定的命令。 有关详细信息,请参阅在 WinDbg 中使用命令浏览器窗口(经典版)。 还可以使用 Ctrl+N 打开新的命令浏览器窗口。

命令浏览器窗口故意模拟 Web 浏览器的行为,其中包含下拉历史记录和上一个/下一个按钮。 历史记录下拉列表仅显示最后 20 个命令,但完整历史记录会保留,因此,可以在命令中返回下拉列表以显示较旧的历史记录。

你可以一次性打开任意数量的命令窗口。 命令窗口保留在工作区中,但仅保存当前命令;历史记录未保留。

WinDbg 视图 菜单具有“ 设置浏览器启动命令 ”选项,该选项允许用户为新的浏览器窗口设置首选命令,例如.dml_start。 此命令保存在工作区中。

“视图”菜单上提供了“最近使用的命令”子窗口,用于保存感兴趣的命令。 选择最近的命令会打开具有给定命令的新浏览器。 浏览器窗口的上下文菜单上有一个菜单项,用于将窗口的当前命令添加到最近命令的列表。 最近命令的列表保存在工作区中。

命令浏览器窗口同步执行命令,因此在命令完成之前不会显示输出。 长时间运行的命令在完成之前不会显示任何内容。

链接具有类似于 Web 浏览器中右键单击上下文菜单的右键单击上下文菜单。 可以在新的浏览器窗口中打开链接。 可以将链接的命令复制到剪贴板以供使用。

单击标题栏右上角附近的图标,将命令浏览器窗口设置为自动刷新或手动刷新。 自动刷新浏览器将自动在调试器状态更改上重新运行其命令。 这会使输出保持实时状态,但代价是对所有更改执行命令。 默认情况下,自动刷新处于打开状态。 如果浏览器不需要实时运行,则可以使用窗口的上下文菜单来禁用自动刷新。

由于命令由引擎执行,而不是由用户界面执行,因此用户界面特定的命令(如 .cls(Clear Screen)将在命令浏览器窗口中使用时返回语法错误。 这也意味着,当用户界面是远程客户端时,命令将由服务器执行,而不是由客户端执行,命令输出将显示服务器状态。

命令浏览器窗口可以运行任何调试器命令,它不必是生成 DML 的命令。 可以使用浏览器窗口让任意一组命令处于活动状态以供使用。

自定义 DML

DML 定义一组可包含在命令输出中的标记。 一个示例是 <链接> 标记。 可以使用 .dml_start.browse 命令来试验<链接>标记(和其他 DML 标记)。 命令 .browse .dml_start filepath 执行存储在 DML 文件中的命令。 输出显示在 命令浏览器窗口中 ,而不是常规命令窗口。

假设文件 c:\DmlExperiment.txt包含以下行。

My DML Experiment
<link cmd="lmD musb*">List modules that begin with usb.</link>

以下命令在“命令浏览器”窗口中显示文本和链接。

.browse .dml_start c:\Dml_Experiment.txt

命令浏览器窗口中 DML 文件输出的屏幕截图。

如果单击 以 usb 链接开头的列表模块,则会看到类似于下图的输出。

单击 DML 文件输出中的链接后模块列表的屏幕截图。

有关 DML 自定义和 DML 标记的完整列表的彻底讨论,请参阅 使用 DML 自定义调试器输出。