调试 Windows Vista
Updated: December 28, 2005
简介:Boot.ini 文件缺陷
如果您尝试在 Microsoft Windows Vista 的最新版本上设置内核调试器,那么您将注意到一项重大的改变。根据版本的不同,Boot.ini 文件要么丢失,要么存在但被忽略。
本技巧解释如何在运行 Windows Vista 的计算机上配置内核调试。这些说明专为最简单的情况设计:只安装了 Windows Vista 操作系统的计算机。对于同时安装了 Windows Vista 和早于 Windows Vista 的 Windows 版本计算机的说明稍微复杂一些,在 Windows Vista 的 Windows Driver Kit (WDK) 中将详细进行说明。
注意:
Windows Vista 的早期测试版本仍然使用 Boot.ini 文件,在那些版本中,您可以编辑 Boot.ini 文件来设置调试。您可以通过 Boot.ini 文件中的 "NOBCD" 启动参数来识别仍然使用 Boot.ini 的版本。NOBCD 参数仅在 Windows Vista 的这些早期版本中受到支持。NOBCD 参数和 Boot.ini 文件在以后的版本中被忽略,在版本 5253 和以后的版本中根本不创建 Boot.ini 文件。
发生了哪些变化?
Windows Vista 引入了一种新的启动加载程序体系结构、一种新的固件无关的启动配置和存储系统(称为 Boot Configuration Data,BCD)以及一种新的启动选项编辑工具 BCDEdit (BCDEdit.exe)。这些组件专为更快更安全地加载 Windows 而设计。
传统的 Windows NT 启动加载程序 (Ntldr) 被 Windows 启动管理器 Windows Boot Manager (Bootmgr.exe) 和一系列系统特定的启动加载程序所替代。在新的配置中,Windows 启动管理器是一种通用的组件,它不了解到每个操作系统的特定要求。每个系统特定的启动加载程序都针对其加载的系统进行了优化。
Boot.ini 发生了什么变化?
在只运行 Windows Vista 的基于 BIOS 的计算机上,Boot.ini 文本文件已经消失(不是隐藏),其在过渡的测试版本上的任何残留内容都被忽略。在同时装有 Windows 早期版本和 Windows Vista 的计算机上,Boot.ini 文件仍然支持较早的系统版本,但是不影响 Windows Vista 中的启动。
在运行 Windows Vista 的基于 EFI 的计算机上,启动选项仍然存储在 NVRAM 中。但是,在 Windows Vista 中,您在基于 EFI 的计算机上使用 BCDEdit 来编辑启动选项(如同您在基于 BIOS 的计算机上所做的那样),而不是使用 Windows API 或专门的工具(例如 NvrBoot)来直接访问 NVRAM。
Windows Vista 还包含 WMI 提供商支持的新的 BCD 类别,使得您可以通过编程的方式来编辑 BCD。有关 BCD 类别的信息,请参见本技巧的末尾部分。
如何编辑启动选项?
BCDEdit (Bcdedit.exe) 是一个编辑 Windows Vista 中启动选项的命令行工具。它替代了 Bootcfg(Windows XP 和 Windows Server 2003 中包含的一个启动选项编辑工具)和 NvrBoot(用于基于 EFI 的计算机的启动选项编辑工具)。
使用 BCDEdit 编辑 Windows Vista 中的启动配置。您可以继续使用 Bootcfg 和 NvrBoot 编辑早于 Windows Vista 的 Windows 版本中的 Boot.ini 文件,即使它们安装在一台同时装有 Windows Vista 的计算机上也是如此。
在 Windows Vista 中配置内核调试
您可以使用下列过程为 Windows Vista 中的调试创建启动项。这个过程使用 BCDEdit(它是用于 Windows Vista 的启动选项编辑工具)。
简单来说,步骤如下:
1. | 以高特权打开命令提示符窗口。 |
2. | 编辑全局调试设置(如果必要)。 |
3. | 显示全局调试设置。 |
4. | 通过复制现有启动项目创建新的启动项目。 |
5. | 向启动菜单添加新的启动项目。 |
6. | 在新的启动项目上启用调试。 |
7. | 验证新的启动项目上是否设置了调试。 |
8. | 更改默认启动项目。 |
9. | 重启计算机。 |
本技巧的剩余部分更详细地描述每个步骤。
1. 以高特权打开命令提示符窗口。
命令提示符窗口必须具备高特权,即使您是计算机上管理员组的成员。
1. | 单击 Start 按钮,指向 All Programs,然后单击 Accessories。 |
2. | 右键单击 Command Prompt,然后单击 Run Elevated。 |
2. 编辑全局调试设置(如果必要)。
在 Windows Vista 中,调试连接类型(串行、1394 或 USB)和连接类型的属性(调试端口或通道)由全局参数 dbgsettings 确定,这个全局参数影响所有启动项(但是您可以为特定的启动项单独设置调试连接类型和属性)。
Windows Vista 默认的全局调试设置为:

要改变全局调试设置,请使用下列命令语法。

例如:

如果命令成功完成,那么 BCDEdit 显示如下消息:
The operation completed successfully.
3. 显示全局调试设置。
要验证改变全局调试设置的命令是否成功完成,请使用下列命令来显示系统上的所有启动设置。

在显示的列表中,全局调试设置是列表中的最后一项。
下面的例子显示了本技巧中步骤 2 的示例命令 bcdedit /dbgsettings 1394 channel:1 执行之后的设置。
...
Kernel Debugger Settings Group ------------------------------ Identifier:{dbgsettings} Type:20100000 Debugger type:1394 Debugger 1394 channel: 1
...4. 通过复制现有启动项目创建新的启动项目。
在命令提示符中键入下列命令。这个命令复制最近用来启动 Windows 的 Microsoft Windows 启动项目(标记为 {current}),并创建一个命名为 DebugEntry 的新启动项目。(这个名称在本技巧的剩余部分一直使用。您可以为新项目指定任何名称。)

如果命令成功执行,那么 BCDEdit 显示如下所示的消息:
The entry was successfully copied to {68602c25-5097-11da-99de-000802209f1b}.前面消息中显示在大括号之间的全局唯一标识符 (GUID) 是新启动项目的标识符。在所有后续的 BCDEdit 命令中,使用标识符来表示项目。
如果命令运行失败,请确保您使用高权限运行命令提示符窗口,并且所有命令参数拼写正确,包括 {current} 两边的大括号。
5. 向启动菜单添加新的启动项目。
在 Windows Vista 中,新的启动加载程序项目不会被自动添加到启动菜单中。如果您跳过这个步骤,那么启动菜单可能不出现(因为只有一个启动加载程序项目)或者菜单出现但不列出新的启动加载程序项目。
您可以按照任何顺序放置启动加载程序项目。使用空格来分隔每个标识符(GUID 或诸如 {current} 等保留的标识符)。要将 DebugEntry 启动项目添加到启动菜单中 {current} 项目的后面,请使用下列命令。

在这个命令中,{ID} 是 DebugEntry 启动加载程序项目的 GUID(包括大括号),如下例所示:

要验证显示顺序是否正确,请使用下列命令:

当您键入 bcdedit 而不带附加的参数时,BCDEdit 按照将在菜单中显示的顺序显示启动管理器项目和启动加载程序项目。
Windows 启动管理器项目还包括启动菜单显示顺序,如下例所示。

6. 在新启动项目上启用调试。
使用下列过程为本技巧中前面的步骤 4 中创建的 DebugEntry 启动项目启用调试。第一个步骤是必要的,因为您需要启动项目的 GUID 用于设置调试的命令。
1. | 要列出计算机上所有的启动加载程序项目,请键入下列命令。  |
2. | 从项目的 Identifier 属性中找到名称为 DebugEntry 的启动项目并复制 GUID(包括两边的大括号{})。  |
3. | 要在 DebugEntry 启动项目上启用调试,请使用下列命令语法。  其中 {ID} 代表您在步骤 2 中从启动项目复制的 GUID。 下面的例子使用步骤 2 中的例子中的 GUID 演示这个命令。  如果命令成功完成,那么 BCDEdit 在命令提示符处显示下列消息。 The operation completed successfully. |
7. 验证新的启动项目上是否设置了调试。
使用下列过程来验证是否在新的 DebugEntry 启动项目上设置了调试。
1. | 要列出计算机上的启动加载程序项目,请使用下列命令。  |
2. | 查找名称为 DebugEntry 的启动项目。结果应该是项目上包含一个 Kernel debugger 属性,其值为Yes,如下例所示。  |
8. 更改默认启动项目。
默认 启动项目是在启动菜单超时时启动管理器选择的启动项目。与早期版本的 Windows 不同,在 Windows Vista 中,默认项目不是由启动菜单中的启动项目的顺序(显示顺序)决定的。
默认情况下,系统创建的 Microsoft Windows 启动项目是默认项目。因为默认项目也是最近用来启动系统的启动项目,所以它被标识为 {current}。
如果想让新启用调试的启动加载程序项目(DebugEntry)成为默认的启动项目,则使用下列命令。

其中 {ID} 是 DebugEntry 启动项目的 GUID,如下例所示。

如果命令成功完成,那么 BCDEdit 在命令提示符处显示下列消息。
The operation completed successfully.
要查看此更改,请使用 bcdedit 命令(不带参数)显示出现在启动菜单中的项目。

此命令生成下列输出。注意,DebugEntry GUID 的所有实例都已经被保留的标识符 {default} 替换。
标识符 {default} 和 {current} 是保留的标识符,指示默认的启动项目和最近用来启动系统的启动项目。如果启动项目既是默认项目又是当前项目,那么它的标识符是 {current}。如果启动项目不是默认项目或当前项目,那么 BCDEdit 存储其原始的 GUID 作为标识符。
您可以在 BCDEdit 命令中通过名称(在Description属性中)标识启动项目,但是必须使用标识符而不是说明。

9. 重启计算机。
重启计算机后,Windows 启动管理器显示启动菜单。您可以选择 Microsoft Windows 启动项目或 DebugEntry。如果您一个都不选,那么 Windows 启动管理器选择默认项目 (DebugEntry)。

更多信息:
Windows Driver Kit
调试驱动程序的工具
Platform SDK
Boot Configuration Data (BCD)
BCD 类别
Windows 硬件开发中心
开发工具和测试:概述
Windows 调试工具 - 概述