Debugging Tools for Windows |
对于KD或CDB来说,“调试器命令窗口”就是整个窗口。在窗口底部的提示符位置输入命令。如果命令有输出,则窗口显示这些输出并重新显示提示符。
对于WinDbg,"调试器命令窗口"指标题为"Command"的窗口。该窗口有两个部分:
这个窗口始终在开始调试会话的时候就会打开。可以通过点击View菜单中的Command、按下ALT+1或者点击工具栏上的Command(Alt+1)按钮()来重新打开或者切换到该窗口。
可以通过按下上箭头和下箭头来滚动查看历史命令。当前面使用过的命令出现时,可以编辑并按下ENTER来执行这条命令(或者编辑过的命令)。光标不需要在行尾即可正常工作。
进行用户模式调试时,调试命令窗口的提示符如下例中一样。
上例中,2是当前进程号,005是当前线程号。
如果将调试器附加到不止一台计算机,在进程和线程号之前会有一个系统号。如下。
这个例子中,3是当前系统号,2是当前进程号,005是当前线程号。
进行内核模式调试时,如果目标机只有一个处理器,提示符如下。
但是,如果目标机有多个处理器,当前处理器号会在提示符之前显示,如下。
如果调试器正忙于执行先前的命令,那么虽然可以添加新命令到缓冲区中,但是暂时不会被执行。另外,仍然可以使用KD和CDB的控制键,以及WinDbg的菜单命令和快捷键。当KD和CDB在这种忙状态时,不会显示提示符。WinDbg处于忙状态时,会在提示符的位置出现下面的符号:
也可以使用.pcmd (Set Prompt Command)命令为提示增加字符。
WinDbg、KD和CDB支持各种命令。一些是各调试器共有的,一些只能在某些调试器中可用。
一些命令只工作在活动调试下,另有一些命令只在调试dump文件时有用。
一些命令仅在当目标运行在特定处理器上时才有用。关于这些命令和限制的详细信息,查看调试器命令。
输入命令时可以使用标准编辑按键:
可以按下TAB键来自动完成文本输入。在任一款调试器中都可以在输入至少一个字符之后通过按下TAB来自动补完命令。重复按下TAB来循环所有的自动完成命令,或者按下SHIFT和TAB来反向循环。也可以在文本中使用通配符并通过TAB来展开成完整命令。例如,如果输入fo*!ba 并按下TAB,调试器将展开为所有名字以"fo"开头的模块中所有以"ba"开头的符号。又比如,可以通过键入!*prcb 并按下TAB来完成所有包含"prcb"的扩展命令。
当使用TAB自动完成时,如果文本片断以点号(.)开始,文本将会以点命令来匹配。如果以感叹号(!)开始,则以扩展命令来匹配。另外,文本还会和符号进行匹配。使用TAB来输入符号时,按下TAB完成代码和符号以及模块名。如果没有显式指定模块名,则用本地符号和模块来补完。如果给出了模块或者模块的模板,则会按所有匹配的符号来补完。
可以右键点击调试器命令窗口来自动将剪贴板中的内容粘贴到命令中。
命令的最大长度为4096个字符。但是,如果从内核调试其控制用户模式调试器,最大长度为512字符。
在CDB和KD中,按下ENTER会自动重复上一条命令。在WinDbg中,可以启用或禁用这个特性。关于该特性的更多信息,查看ENTER (Repeat Last Command)。
如果上一条命令产生了很上的输出并且想中断它,可以在CDB和KD中使用CTRL+C。在WinDbg中,使用Debug | Break或按下CTRL+BREAK。
在内核模式调试时,可以通过按下CTRL+C中断目标机的命令执行。
使用.cls (Clear Screen) 命令清空调试器命令窗口的所有文本。该命令清除所有命令的历史记录。 在WinDbg中,可以使用Edit | Clear Command Output 命令或者在调试器命令窗口的快捷菜单中点击Clear command output来清除命令历史记录。
很多命令和扩展命令都接受表达式作为参数。调试器在执行命令之前先计算这些表达式的值。关于表达式的更多信息,查看表达式求值。
别名是用来避免重复键入复杂语句的文本宏。有两种类型的别名。更多信息,查看使用别名。
使用如下命令来重复操作或条件执行其他命令:
关于每条命令的更多信息,查看各命令的说明。
使用滚动条来查看之前的命令和它们的输出。
使用CDB和KD时,所有键盘输入都自动将调试器命令窗口置于窗口底部。
在WinDbg中,当命令产生输出或按下ENTER键时,文本显示都会自动滚动到底部。如果要禁用自动滚动,点击View菜单的Options并清除Automatically scroll 选择框。
在WinDbg中,可以使用更多改变文本如何在调试器命令窗口中显示的特性。一些可以在WinDbg窗口中使用,一些可以在调试器命令窗口的快捷菜单中使用,也有一些可以在适当的菜单图标上点击。
通过调试器进行远程调试时,调试客户端 可以访问有限的命令。要修改客户端可以访问的命令数,使用-clines 命令行选项或者 _NT_DEBUG_HISTORY_SIZE 环境变量。