Debugging Tools for Windows

选择内核调试设置

开始内核调试之前,必须选择使用的连接设置。

调试器支持各种不同的内核调试方式:

有三种办法可以进行内核调试设置:通过环境变量,通过调试器命令行,或者通过WinDbg图形界面。如果不使用这些方法,调试器默认使用COM1和19200波特率连接。

环境变量

如果通过环境变量设置COM端口连接,需要使用下面两个变量:

set _NT_DEBUG_PORT = ComPort 
set _NT_DEBUG_BAUD_RATE = BaudRate 

通过环境变量设置1394连接,使用下面三个变量:

set _NT_DEBUG_BUS = 1394 
set _NT_DEBUG_1394_CHANNEL = 1394Channel 
set _NT_DEBUG_1394_SYMLINK = 1394Protocol 

不能用环境变量来设置USB 2.0调试电缆连接、通过modem的调试、通过命名管道调试和本地内核调试。

KD 命令行

如果使用KD命令行,可以在-k 命令行选项之后指定连接设置。com:port 参数指定调试器通过COM端口连接。1394 参数指定通过1394电缆连接。usb2 参数指定通过USB 2.0调试电缆连接。com:modem 参数指定通过modem连接。com:pipe 参数指定通过命名管到连接。-kl 命令行选项启用内核调试。如果省略掉这些参数,则使用环境变量或者默认设置。

kd ... -k com:port=ComPort,baud=BaudRate ... 
kd ... -k 1394:channel=1394Channel[,symlink=1394Protocol... 
kd ... -k usb2:targetname=USBString ... 
kd ... -k com:pipe,port=\\VMHost\pipe\PipeName[,resets=0][,reconnect... 
kd ... -k com:modem ... 
kd ... -kl ... 
kd ... 

WinDbg 命令行

WinDbg 连接参数和KD一样。唯一不同在于,如果想使用环境变量或者默认设置,还是必须指定-k 选项。

windbg ... -k com:port=ComPort,baud=BaudRate ... 
windbg ... -k 1394:channel=1394Channel[,symlink=1394Protocol... 
windbg ... -k usb2:targetname=USBString ... 
windbg ... -k com:pipe,port=\\VMHost\pipe\PipeName[,resets=0][,reconnect... 
windbg ... -k com:modem ... 
windbg ... -kl ... 
windbg ... -k ... 

WinDbg 对话框

如果WinDbg已经运行并且处于静止状态,可以使用File | Kernel Debug 菜单选项来开始新的内核调试任务。出现的对话框中有四个选项卡:COM1394USB 2.0Local。他们每个都指定一种不同的连接方式:

这个对话框不能用来设置modem和命名管道连接。

参数

这些参数由环境变量、命令行选项和WinDbg对话框使用,有下面一些可能的值:

ComPort
指定COM端口的名字。可以是"com2"或者"\\.\com2"这样的形式,但是不能仅仅只有一个数字。
BaudRate
指定波特率,可以是9600,19200,38400,57600或115200.
1394Channel
指定1394频道的数字。合法的频道是从0到62之间的任何整数。1394Channel 必须和目标机上使用的相同,但是和适配器上的物理1394端口无关。

注意 1394内核调试只在主控机和目标机都运行Windows XP之后系统的情况下支持。通过1394电缆调试之前,必须在主控机和目标机上都进行一些软件配置。查看禁用1394控制器安装1394虚拟驱动程序获取更多信息。

1394Protocol
指定1394内核连接使用的协议。这个选项几乎总是被省略,因为调试器会自动选择合适的协议。如果想自己设定,并且目标计算机运行Windows XP,1394Protocol 需要设置为"channel"。如果目标机运行Windows Server 2003或之后 的系统,1394协议需要设置为"instance"。如果省略,调试器会选择适合目标机的协议。这个参数只能通过命令行或环境变量设置,不能通过WinDbg图形界面
USBString
指定USB 2.0连接字符串。必须和/targetname 引导选项指定的字符串相同;查看/debug获取Windows Vista之前的引导选项设置,查看BCDEdit / dbgsettings获取Windows Vista和之后的系统中该引导选项的设置。

注意 USB 2.0内核调试仅当主控机运行Windows系统,目标机运行Windows Vista及之后的系统时才支持。需要进行更多的配置,查看设置USB 2.0调试电缆连接获取更多信息。

VMHost
当调试虚拟机时,VMHost 指定虚拟机运行的物理计算机名。虚拟机文档中一般用virtual machine host 来引用它。如果虚拟机和内核调试器运行在同样的机器上,VMHost可以使用一个点号(.)。
PipeName
指定虚拟机为调试连接创建的命名管道名。
resets=0
指定一个无约束的当主控机和目标机进行同步时发送给目标机的重置包的数量。这仅仅在使用某些特定的虚拟机时需要。查看附加到虚拟机(内核模式)附加到虚拟机(内核模式)获取更多信息。
reconnect
指定当读/写失败时,调试器自动断开并重连管道。另外,当调试器启动时没有找到指定的命名管到,reconnect 使得它等待这个名字的管道出现。这个参数仅在调试某些特定类型的虚拟机时需要。查看附加到虚拟机(内核模式)获取更多信息。
modem
指定调试器通过modem连接。
-kl
指定调试器进行本地内核调试。仅当用户具有调试权限时才能启动进程。要使用本地内核调试,x86的boot.ini文件或Itanium的OsLoadOptions 配置必须包含/debug 选项。查看进行本地内核调试获取关于该技术的更多特殊功能。

关于其他有用的环境变量和命令行选项列表,查看环境变量命令行选项

示例

下面的批处理文件用来设置COM连接

set _NT_SYMBOL_PATH=d:\mysymbols
set _NT_DEBUG_PORT=com1
set _NT_DEBUG_BAUD_RATE=19200
set _NT_DEBUG_LOG_FILE_OPEN=d:\debuggers\logfile1.log
kd

下面的批处理用于设置1394连接:

set _NT_SYMBOL_PATH=d:\mysymbols
set _NT_DEBUG_BUS=1394
set _NT_DEBUG_1394_CHANNEL=44
set _NT_DEBUG_LOG_FILE_OPEN=d:\debuggers\logfile1.log
windbg -k

下面的命令行在每种配置下启动KD,不使用任何环境变量:

kd -y d:\mysymbols -k com:modem 

kd -y d:\mysymbols -k com:port=com2,baud=57600 

kd -y d:\mysymbols -k com:port=\\.\com2,baud=115200 

kd -y d:\mysymbols -k 1394:channel=20,symlink=instance 

Build machine: CAPEBUILD