使用调试器标记语言

调试器命令可以提供纯文本输出,也可以以增强格式提供输出,该格式使用调试器标记语言 (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 的颜色属性,并且仅在启用了颜色模式的真正控制台中运行时。 具有重定向 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_startfilepath 执行存储在 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 自定义调试器输出