2023年1月

安装Windows调试工具时,您将同时获得32位工具集和64位工具集。如下图

如果使用的是Microsoft Visual Studio调试环境,则无需考虑是否使用32位或64位,因为Visual Studio会自动选择正确的调试工具。如果您使用的是其他调试环境(windbg、kd、cdb或ntsd),则必须自己做出选择。

运行调试器的计算机称为主机,。

一、相关概念

  • 调试主机 (Host computer)
    在调试环境下,运行调试器(比如Windbg)的计算机称为主机。
  • 调试目标机(Target computer)
    被调试的计算机称为目标计算机

二、选择标准

选择标准就是以主机和目标机以及调试对象来划分的。要确定要使用的调试工具集,您需要知道主机上运行的处理器类型以及主机运行的是32位还是64位版本的Windows。

2.1、当主机为32位机时
也就是说主机是32位的cpu且是32位的Windows系统时,请使用32位调试工具。此情况适用于基于x86和基于x64的目标。

2.2、当主机位64机位时

如果主机使用基于x64的处理器,并且运行64位版本的Windows,则应用以下规则:

  • 如果分析对象是转储文件,可以使用32位调试工具或64位调试工具。(转储文件是用户模式转储文件还是内核模式转储文件并不重要,转储文件是基于x86还是基于x64的平台生成也不重要。)
  • 如果正在执行实时内核模式调试,则可以使用32位调试工具或x64调试工具。(此情况适用于基于x86和基于x64的目标。)
  • 如果要调试与调试器在同一台计算机上运行的实时用户模式代码,请使用64位工具调试在WOW64上运行的64位代码和32位代码。要将调试器设置为32位或64位模式,请使用.effmach命令。
  • 如果要调试在单独目标计算机上运行的实时32位用户模式代码,请使用32位调试工具。

总之,只有在实时用户态调试,并且调试器也在同一台64位机器上的情况下必须用64位的调试工具集!

 

前面介绍了Windbg的UI功能,也基本上能完成基本的调试任务,但是WinDBG主要是以命令方式工作的,这些命令在Command Window里输入。WinDBG共支持三类命令:标准命令、元命令和扩展命令。某些命令仅在实时调试中可用,其他命令仅在调试转储文件时可用。某些命令仅在用户模式调试期间可用,其他命令仅在内核模式调试期间可用。只有当目标在某些处理器上运行时,某些命令才可用。

一、标准命令

标准命令(standard command)用来提供适用于所有调试目标的基本调试功能.标准命令通常是一两个字符(version除外)或者符号,只有version等少数命令除外。标准命令的第一个字符是不分大小写的, 第二个字符可能区分大小写。所有标准命令都是实现在WinDBG内部的, 执行这些命令时不需要加载任何扩展模块。迄今为止, WinDBG调试器共实现了130多条标准命令, 分为60多个系列. 为了便于记忆, 可以根据功能将标准命令归纳为如下18个子类。在命令编辑框中输入一个问号(?), 可以显示出主要的标准命令和每个命令的简单介绍。

 

  • 控制调试目标执行

功能 命令 描述/助记 补充信息
恢复运行 g Go ~123g~#g~*g
跟踪执行 t Trace  
单步执行 p Step  
追踪监视 wt Trace and Watch Data  

我们不仅可以通过GUI的方式使用Windbg,还可以通过命令行的方式使用它,且在有些需求和使用场景下,只能使用命令行模式

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

调试器标记语言 (DML) 提供了一种机制增强来自调试器和扩展的输出。 与 HTML 类似,调试器的标记支持允许将输出包括显示指令和额外非显示的标记窗体中的信息。 调试器用户界面,WinDbg 等中分析出提供在 DML 来增强所显示的信息,并提供新行为,如网格显示和排序的额外信息。 本主题介绍如何自定义使用 DML 您调试输出。 

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

DML 概述

上的 DML 的主要权益以提供链接到调试器输出中的相关信息的能力。 一个主要的 DML 标记的是<链接>标记用于指示是否可以通过链接访问与一种输出相关的信息输出生成者的说明操作。 为使用 web 浏览器中的 HTML 链接这样用户能够导航超链接的信息。

提供超链接内容的优点是,它可用于增强的调试程序和调试器扩展功能可发现性。 调试器和及其扩展插件包含大量的功能,但它可能很难确定要在不同的方案中使用的相应命令。 用户必须只需知道哪些命令可以用来在特定方案中使用。 用户和内核调试之间的差异会进一步增加复杂性。 这通常意味着许多用户不了解可帮助他们的调试命令。 DML 链接提供了任意调试命令来包装在备用的演示文稿,例如说明性文本,可单击的菜单系统或链接的帮助功能。 使用 DML,可以对命令输出来增强用户引导到适用于手头的任务的其他相关命令。

调试器 DML 支持

  • 命令窗口在 WinDbg 中的支持所有 DML 行为,将显示颜色、 字体样式和链接。
  • 使用颜色模式已启用,则返回 true 的控制台中运行时,控制台调试器 – ntsd、 cdb 和 kd – 仅支持 DML,和唯一的颜色属性。
  • 通过重定向 I/O 的调试器,ntsd – d 或 remote.exe 会话不会显示任何颜色。

DML 内容规范

DML 不应为完整表示语言,如 HTML。 DML 是精心设计的非常简单,只有少量的标记。

由于并非所有调试器工具都支持多格式文本,DML 旨在允许 DML 和纯文本之间的简单转换。 这样,DML 所有现有的调试器工具中的函数。 可以轻松地支持颜色等效果,因为删除它们不会删除携带的实际信息的文本。

DML 不是 XML。 DML 不会尝试执行语义,也不是结构化信息。 如上所述,必须有一个简单之间的映射 DML 和纯文本,因此,DML 标记是所有可放弃。

DML 不是可扩展的;所有标记是预定义的并验证,以跨所有现有的调试器工具工作。

标记结构

类似于 XML,DML 标记可以作为起点<tagname [args] >并且下列</tagname>。

特殊字符

DML 内容大致遵循特殊字符的 XML/HTML 的规则。 字符 &、 <,>和"很特殊,不能使用以纯文本。 等效的转义字符的版本为 &、 <,>和"。 例如此文本:

"Alice 和 Bob 想 3 < 4"

将转换为以下 dml。

text