从6.6.07版的调试器开始,为了增强和扩展调试器的数据输出,将使用新的机制:debuggermarkup language (DML)。DML象HTML那样允许在一定格式的标记中包含指令和不显示的信息。调试器的用户界面将能分析额外的信息并提供新的特性。调试器命令可以以纯文本或使用调试器标记语言(DML)的增强格式提供输出。使用DML增强的输出包括可以单击以执行相关命令的链接。

DML的两个主要的功能

  • 链接相关信息。DML中的一个link标记能产生一个相关信息的链接,并允许通过一定的操作访问它。就象HTML中的链接一样,允许用户快速定位超级链接中的信息。
  • 调试器及其扩展功能的输出特性。调试器及其扩展拥有很强大的功能,但是关于外观显示的却很少。用户必须知道什么是可用的,这意味着用户通常不知道什么命令能帮助他们。DML链接允许将任意指令封装在预备的外观中,例如说明文本,菜单或者帮助链接。

关于理解什么是DML的另一个关键

  • DML不是HTML.DML有意设计得很简单,只有一些标记。为了保留简易性,DML将不会发展成图象显示功能完善的语言。由于已经有很多基于纯文本输出的调试器的代码,DML的目标是为现有的界面提供简单的DML和纯文本的转换。受限制的DML标记使它不能成为外观的关键。一些效果,例如文字颜色能得到很好的支持,除非你删除它们,但别删除包含实际信息的文本。另一方面,由于没有变换纯文本流,不支持格式化文本标记的使用,例如定位功能
  • DML不是XML。DML不会传递语义或数据结构信息。正如前面所说的,DML和纯文本之间,只有简单的变换,因此DML标记全部都是可丢弃的。DML不可扩展,所有标记都是由调试器开发团队定义。

DML 支持命令

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

  • .dml_start
  • .dml_flow
  • !dml_proc
  • lmD
  • kM
  • .chain /D
  • .help 获取 /D
  • .printf /D

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

使用调试器标记语言

 

MSVCR120D模块的详细信息的其他链接。

使用调试器标记语言

打开和关闭 DML

当启用 DML 时 ,能够生成 DML 命令输出会默认情况下生成 DML 输出。.prefer_dml命令为能够以调试器标记语言(dml)格式提供输出的命令设置默认行为。

.prefer_dml 0  默认情况下,所有命令都将提供纯文本输出。
.prefer_dml 1  默认情况下,能够提供DML输出的命令将提供DML输出。

执行.prefer_dml 0
使用调试器标记语言

执行.prefer_dml 1后

使用调试器标记语言

控制台增强功能

通过重定向 I/O 的调试器,ntsd – d 或 remote.exe 会话不会显示任何颜色。

控制台调试器颜色模式

默认情况下大多数颜色未设置,而是默认为当前控制台颜色。

Windbg 命令浏览器窗口

可以使用浏览器窗口具有一组任意的供使用的有效命令。

自定义的 DML

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

新建一个文件 c:\DmlExperiment.txt 包含以下行。

My DML Experiment
<link cmd="lmDvmMSVCR120D">List modules that begin withMSVCR.</link>

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

.browse .dml_start c:\Dml_Experiment.txt

使用调试器标记语言

如果单击列表的开头 MSVCR 模块链接,请参阅下图类似的输出。

使用调试器标记语言

DML中的右键单击行为

 

 

从Windows10开始,右键单击行为在DML中可用。此示例演示如何使用<altlink>定义右键单击行为,以发送断点bp(设置断点)命令,并通过常规单击发送u(未组装)。
<link cmd="u ConsoleApplication3!f1">
<altlink name="Set Breakpoint (bp)" cmd="bp MyProgram!memcpy" />
u ConsoleApplication3!f1
</link>

替换到上面的文件里去,执行

使用调试器标记语言

单袭连接
使用调试器标记语言

右键单击

使用调试器标记语言

 

 

 

相关文章:

  • 2021-11-18
  • 2022-12-23
  • 2022-12-23
  • 2021-12-31
  • 2021-09-22
  • 2021-08-03
  • 2022-02-22
  • 2022-01-06
猜你喜欢
  • 2022-12-23
  • 2021-06-06
  • 2022-02-22
  • 2021-09-12
  • 2021-08-28
  • 2021-07-25
相关资源
相似解决方案