Windbg把和调试相关的所有配置称为workspace,这些配置信息包括:调试窗口类型和位置,打开的文件和窗口位置,符号、源码和可执行文件的路径,以及断点设置等。Windbg中包含多种不同类型的workspace:
- 基本workspace。打开Windbg并且没有进行任何调试操作的情况下,使用这个workspace。
- 默认workspace。它分为默认的用户调试、内核调试、远程调试,三种不同类型的默认workspace。
- 处理器workspace。内核调试时,根据处理器类型的不同,会配置不同的workspace。不同的处理器类型包括X86、X64和IA64。
- 命名workspace。可以把你的配置保存为一个命名的workspace保存在注册表中,并且在需要的时候应用它。Windbg软件本身也会根据你所调试的可执行程序或dump文件,自动保存为命名workspace。这就是为什么你调试了一次HelloWorld程序后,下次再次调试的时候,Windbg会自动打开很多相关的源文件,并自动加载符号的原因。
所有这些workspace的信息都被保存在注册表中,注册表的路径是:
HKEY_CURRENT_USER\Software\Microsoft\Windbg\Workspaces
如果把这个注册表键里面的内容导出为xx.reg文件,则可以把这个文件分享给别人,让别人使用与你相同的配置。在windbg的语境中,这个文件被称为主题(Theme)。 旧版的Windbg安装后,有一个themes.doc文档,介绍如何使用主题。Windbg的安装目录里面有一个Themes目录,里面有几个预安装的主题。 刚安装好Windbg后打开它,自动加载基本workspace,会发现它里面没有任何多余的配置:没有任何打开的窗口,颜色配置是白底黑字,没有色彩高亮。这是最基本的,也是比较沉闷的。 现在要改变这种沉闷,就从Themes开始。 打开Themes目录后,看到有四种主题,就选择使用标准主题(standard.reg)。使用方法很简单:双击导入注册表即可。建议最好先把注册表中的现有内容清空掉,会更干净一些。可以手动,也可以用下面的命令:
reg delete HKCU\Software\Microsoft\Windbg
做好上面一步后,再次打开windbg,会看到界面丰富了很多。有三四个页表坞(table dock)同时存在,每个dock上有若干打开的窗口,并拥有经过安排的上下布局。我们不讨论布局的合理性,不过这些常用窗口,在调试过程中确实会用到。默认打开着,会比较省心一点。 会看到有好几个名为placeholdx.c文件分布在各个不同的dock上,这是干什么用的呢?原来它是用来代表源文件的。调试过程中自然少不了使用源文件,源文件打开的时候,windbg会找有没有类型相同的源文件被打开?如果有的话,就把它放在同样的dock上。否则源文件窗口就是悬浮显示的。所以这些placeholdx.c文件是给源文件占位用的,下次打开一个源文件时,会自动挂到相同dock上。 那为什么有好几个占位文件呢?我通过实验发现,windbg会使用最后一次打开的源文件作为参考。换句话说,它在每个dock上都搞了一个占位文件,你想使用哪个都可以。但如果要切换dock的话,就要先手动拖动一下,下次就自动换过去了。可惜的是,这些主题中不包含色彩高亮内容。调试信息可以分为这几种:普通、错误、警告、冗长、提示。但是如果这些信息都是以白底黑字显示的话,就无以区分。所以配置色彩高亮是很有用的。手动配置的方法在windbg界面\view菜单\options\Colors面板中完成的。左图是配置好之后的效果图。读者可以下从文章开始处他对应的Theme文件。
下面是对于各种颜色的解释:
颜色名称 |
描述 |
Background | 背景色,包括命令窗口,源码和汇编窗口 |
Text | 普通文字颜色,特殊指定文字除外 |
Current line | 当前源代码、汇编代码的字体颜色 |
Breakpoint current line | 当前断点颜色 |
Enabled breakpoint | Enabled断点颜色 |
Disabled breakpoint | Disabled断点颜色 |
Changed data text | 变量值、寄存器值发生改变时,高亮显示的颜色。比如手动改变一个变量后,这个变量会高亮显示。 |
Source … | 这里面包括各种源代码的颜色配置:关键字、操作符、字符串等等 |
Normal level command window & background | 普通的命令输出前景及背景颜色 |
Error level command window& background | 命令输出中错误信息的前景及背景颜色 |
Warning level command window& background | 命令输出中警告信息的前景及背景颜色 |
Verbose level command window& background | 命令输出中冗长信息的前景及背景颜色 |
Prompt level command window& background | 命令输出中提示信息的前景及背景颜色,比如用户输入的命令在显示的时候就属于提示信息。 |