使用调试器命令

本文介绍了调试器命令的使用。 WinDbg 是一个调试器,可用于分析故障转储、调试实时用户模式和内核模式代码,以及检查 CPU 寄存器和内存。 有关详细信息,请参阅 WinDbg 概述

若要安装调试器,请参阅 安装 Windows 调试器

若要开始使用 WinDbg,请参阅使用 Windows 调试入门

WinDbg 调试器命令窗口

对于 WinDbg,“调试器命令窗口”是指标题栏中标记为“命令”的窗口。 此窗口包含两个窗格:

  • 在底部的小窗格中,输入命令。

  • 在较大的上部窗格中,可以查看命令输出。

此窗口始终在调试会话开始时打开。 可以通过选择“视图”菜单上的“命令”、按 Alt+1 或选择“命令 (Alt+1) ”按钮 (“调试器命令窗口”按钮的屏幕截图来重新打开或切换到此窗口。

可以使用向上键和向下键滚动浏览命令历史记录。 出现上一个命令时,可以对其进行编辑,然后按 Enter 执行上一个命令 (或) 上一个命令的编辑版本。 游标不必位于行的末尾,此过程就可以正常工作。

KD 或 CDB

对于 KD 或 CDB,“调试器命令窗口”是指整个窗口。 在窗口底部的提示符下输入命令。 如果命令有任何输出,窗口将显示输出,然后再次显示提示。

调试器命令窗口提示

执行用户模式调试时,“调试器命令”窗口中的提示类似于以下示例。

2:005>

在前面的示例中,2 是当前进程编号,005 是当前线程编号。

如果将调试器附加到多台计算机,系统编号将包含在进程和线程号之前,如以下示例所示。

3:2:005>

在此示例中,3 是当前系统编号,2 是当前进程编号,005 是当前线程编号。

在只有一个处理器的目标计算机上执行内核模式调试时,提示类似于以下示例。

kd>

但是,如果目标计算机具有多个处理器,则当前处理器的编号会显示在提示之前,如以下示例所示。

0: kd>

如果调试器正忙于处理以前发出的命令,则不会暂时处理新命令,尽管可以将其添加到命令缓冲区。 此外,你仍然可以在 KD 和 CDB 中使用 控制键 ,并且仍然可以在 WinDbg 中使用菜单命令和 快捷键 。 当 KD 或 CDB 处于此繁忙状态时,不会显示任何提示。 当 WinDbg 处于此繁忙状态时,将显示以下指示器来代替提示符:

*BUSY*

可以使用 .pcmd (Set Prompt Command) 命令向此提示添加文本。

命令类型

WinDbg、KD 和 CDB 支持各种命令。 某些命令在调试器之间共享,有些命令仅在一个或两个调试器上可用。

某些命令仅在实时调试中可用,其他命令仅在调试转储文件时可用。

某些命令仅在用户模式调试期间可用,其他命令仅在内核模式调试期间可用。

某些命令仅在目标在某些处理器上运行时才可用。 有关所有命令及其限制的详细信息,请参阅 调试器命令

编辑、重复和取消命令

输入命令时,可以使用标准编辑键:

  • 使用向上键和向下键查找以前的命令。

  • 使用 BACKSPACE、DELETE、INSERT、向左键和向右键编辑当前命令。

  • 按 ESC 键清除当前行。

可以按 Tab 键自动完成文本输入。 在任何调试器中,在输入至少一个字符后按 TAB 键自动完成命令。 重复按 TAB 键循环浏览文本补全选项,按住 SHIFT 键并按 TAB 向后循环。 还可以在文本中使用通配符,然后按 Tab 展开到完整的文本完成选项集。 例如,如果键入 fo*!ba ,然后按 TAB,调试器将扩展到以“ba”开头的所有模块中以“fo”开头的所有模块中的符号集。 另举一个例子,可以通过键入 !*prcb ,然后按 TAB 来完成所有包含“prcb”的扩展命令。

使用 TAB 键执行文本补全时,如果文本片段以句点 (.) 开头,则文本将与点命令匹配。 如果文本片段以感叹号 (!) 开头,则文本将匹配到扩展命令。 否则,文本与符号匹配。 使用 TAB 键输入符号时,按 TAB 键将完成代码并键入符号和模块名称。 如果没有明显的模块名称,则完成本地符号和模块名称。 如果提供了模块或模块模式,符号完成将完成所有匹配项中的代码和类型符号。

可以在“调试器命令”窗口中选择并按住 (或右键单击) ,以自动将剪贴板的内容粘贴到正在键入的命令中。

最大命令长度为 4096 个字符。 但是,如果要 从内核调试器控制用户模式调试器,则最大行长为 512 个字符。

在 CDB 和 KD 中,单独按 Enter 键重复上一个命令。 在 WinDbg 中,可以启用或禁用此行为。 有关此行为的详细信息,请参阅 enter (重复上一个命令)

如果发出的最后一个命令显示长显示器,并且你想要将其截断,请在 CDB 或 KD 中使用 Ctrl+C 键。 在 WinDbg 中,使用 调试 |中断 或按 Ctrl+BREAK。

在内核模式调试中,可以通过按 Ctrl+C 从目标计算机的键盘取消命令。

可以使用 .cls (“清除屏幕) ”命令从 “调试器命令”窗口中清除所有文本。 此命令清除整个命令历史记录。 在 WinDbg 中,可以使用编辑 | 清除命令历史记录 清除“命令输出 ”命令,或者通过在“调试器命令”窗口的快捷菜单中选择“ 清除命令输出 ”。

表达式语法

许多命令和扩展命令接受 表达式 作为其参数。 调试器在执行命令之前计算这些表达式。 有关表达式的详细信息,请参阅 计算表达式

别名

别名 是文本宏,可用于避免重新键入复杂短语。 有两种类型的别名。 有关别名的详细信息,请参阅 使用别名

Self-Repeating 命令

可以使用以下命令重复操作或有条件地执行其他命令:

有关每个命令的详细信息,请参阅各个命令主题。

控制滚动

可以使用滚动条查看以前的命令及其输出。

使用 CDB 或 KD 时,任何键盘条目都会自动将调试器命令窗口向下滚动到底部。

在 WinDbg 中,每当命令生成输出或按 Enter 键时,显示器都会自动向下滚动到底部。 如果要禁用此自动滚动,请选择“视图”菜单上的“选项”,然后清除“自动滚动检查框。

WinDbg 文本功能

在 WinDbg 中,可以使用一些其他功能来更改文本在 “调试器命令”窗口中的显示方式。 可以在 WinDbg 窗口中访问其中一些功能,在“调试器命令”窗口的快捷菜单中访问其中一些功能,也可以通过选择相应的菜单图标来访问其中一些功能。

  • 快捷菜单上的“Word包装”命令将打开和关闭自动换行状态。 此命令会影响整个窗口,而不仅仅是更改此状态后使用的命令。 由于许多命令和扩展会生成带格式的显示器,因此我们通常不建议换行。

  • 编辑 |“添加到命令输出”菜单命令在“调试器命令”窗口中添加注释。 快捷菜单上的 “添加到命令输出 ”命令具有相同的效果。

  • 可以自定义用于调试器命令窗口的文本和背景的颜色。 可以为不同类型的文本指定不同的颜色。 例如,可以一种颜色显示自动寄存器输出,以另一种颜色显示错误消息,以第三种颜色显示 DbgPrint 消息。

  • 可以使用 WinDbg 调试信息窗口通用的所有功能,例如自定义字体和使用特殊编辑命令。

Remote Debugging

通过调试器执行远程调试时,调试客户端可以访问有限数量的命令。 若要更改客户端可以访问的命令数,请使用 -clines命令行选项 或 _NT_DEBUG_HISTORY_SIZE 环境变量