cc682/NetRoc
http://netroc682.spaces.live.com/
!pars
!pars 扩展显示指定的processor application registers file。
语法
!pars Address
参数
Address
指定processor application registers file的地址。
DLL
|
Windows NT 4.0
|
不可用
|
|
Windows 2000
|
不可用
|
|
Windows XP和之后
|
Kdexts.dll
|
该命令只能对Itanium目标机使用。
!pat
!pat 显示目标处理器的页面属性表寄存器(Page Attribute Table (PAT) registers)。
语法
!pat Flag
!pat
参数
Flag
如果设置Flag,调试器在显示PAT之前会先验证PAT功能是否存在。
DLL
|
Windows NT 4.0
|
不可用
|
|
Windows 2000
|
Kdextx86.dll
|
|
Windows XP和之后
|
Kdexts.dll
|
该扩展只能对x86目标机使用。
!pci
!pci 扩展命令用来显示PCI(peripheral component interconnect)总线的当前状态,以及附加到该总线上的任何设备。
语法
!pci [Flags [Bus [Device [Function [MinAddress MaxAddress]]]]]
参数
Flags
指定输出级别。可以是下面这些位的任意组合:
Bit 0 (0x1)
显示详细输出。
Bit 1 (0x2)
显示从bus 0到指定的Bus范围内的所有总线。
Bit 2 (0x4)
显示中包含原始字节格式的信息。如果设置了MinAddress、MaxAddress,或者标志的位0x8,则该标志也自动被设置。
Bit 3 (0x8)
显示中包含原始DWORD格式的信息。
Bit 4 (0x10)
显示中包含无效设备的号码(invalid device number)。如果指定了Device,则跳过该标志。
Bit 5 (0x20)
显示中包含无效功能号(invalid function numbers)。
Bit 6 (0x40)
显示中包含capabilities。
Bit 7 (0x80)
显示Intel 8086设备相关信息(Intel 8086 device-specific information)。
Bit 8 (0x100)
显示PCI配置空间(PCI configuration space)。
Bus
指定要显示的总线。Bus 可以在0到0xFF范围之内。如果省略,则显示primary bus (bus 0)的信息。如果Flags包含bit 1 (0x2), Bus 用于指定要显示的最大一个总线号。
Device
指定设备的slot device number。如果省略,则显示所有设备的信息。
Function
指定设备的slot function number。如果省略,则显示所有的设备功能(device function)。
MinAddress
指定要显示的原始字节或者原始DWORD的首地址。必须在0到0xFF之间。
MaxAddress
指定要显示的原始字节或者原始DWORD的尾地址。必须在0到0xFF之间,并且不能比MinAddress 小。
DLL
|
Windows NT 4.0
|
Kext.dll Kdextx86.dll
|
|
Windows 2000
|
Kext.dll Kdextx86.dll
|
|
Windows XP和之后
|
Kdexts.dll
|
该扩展命令只能对x86目标机使用。
注释
使用!ecb、!ecd、或者 !ecw来编辑PCI配置空间(PCI configuration space)。
下面的例子显示了所有总线和它们的设备的列表。该命令需要较长时间来执行。调试器扫描目标系统的PCI总线时,在显示的信息底部可以看到移动的计数器:
kd> !pci 2 ff
PCI Bus 0
00:0 8086:1237.02 Cmd[0106:.mb..s] Sts[2280:.....] Device Host bridge
0d:0 8086:7000.01 Cmd[0007:imb...] Sts[0280:.....] Device ISA bridge
0d:1 8086:7010.00 Cmd[0005:i.b...] Sts[0280:.....] Device IDE controller
0e:0 1011:0021.02 Cmd[0107:imb..s] Sts[0280:.....] PciBridge 0->1-1 PCI-PCI bridge
10:0 102b:0519.01 Cmd[0083:im....] Sts[0280:.....] Device VGA compatible controller
PCI Bus 1
08:0 10b7:9050.00 Cmd[0107:imb..s] Sts[0200:.....] Device Ethernet
09:0 9004:8178.00 Cmd[0117:imb..s] Sts[0280:.....] Device SCSI controller
下面的例子显示primary bus 上设备的详细信息。每行开头的两位数字是设备号(device number),后面跟的一位数字是功能号(function number):
kd> !pci 1 0
PCI Bus 0
00:0 8086:1237.02 Cmd[0106:.mb..s] Sts[2280:.....] Device Host bridge
cf8:80000000 IntPin:0 IntLine:0 Rom:0 cis:0 cap:0
0d:0 8086:7000.01 Cmd[0007:imb...] Sts[0280:.....] Device ISA bridge
cf8:80006800 IntPin:0 IntLine:0 Rom:0 cis:0 cap:0
0d:1 8086:7010.00 Cmd[0005:i.b...] Sts[0280:.....] Device IDE controller
cf8:80006900 IntPin:0 IntLine:0 Rom:0 cis:0 cap:0
IO[4]:fff1
0e:0 1011:0021.02 Cmd[0107:imb..s] Sts[0280:.....] PciBridge 0->1-1 PCI-PCI bridge
cf8:80007000 IntPin:0 IntLine:0 Rom:0 cap:0 2sts:2280 BCtrl:6 ISA
IO:f000-ffff Mem:fc000000-fdffffff PMem:fff00000-fffff
10:0 102b:0519.01 Cmd[0083:im....] Sts[0280:.....] Device VGA compatible controller
cf8:80008000 IntPin:1 IntLine:9 Rom:80000000 cis:0 cap:0
MEM[0]:fe800000 MPF[1]:fe000008
下面的例子显示bus 0,设备0x0D,功能0x01的更详细一些的信息,包括从地址0x00到0x3F之间的原始DWORD值:
kd> !pci f 0 d 1 0 3f
PCI Bus 0
0d:1 8086:7010.00 Cmd[0005:i.b...] Sts[0280:.....] Device IDE controller
cf8:80006900 IntPin:0 IntLine:0 Rom:0 cis:0 cap:0
IO[4]:fff1
00000000: 70108086 02800005 01018000 00002000
00000010: 00000000 00000000 00000000 00000000
00000020: 0000fff1 00000000 00000000 00000000
00000030: 00000000 00000000 00000000 00000000
附加信息
查看Plug and Play 调试获得该扩展命令的应用和更多示例。关于PCI总线的信息,查看Windows Driver Kit (WDK)文档。
!pciir
!pciir 扩展显示从PCI设备到中断控制器输入(interrupt controller input)的硬件路由(hardware routing)的内容。
语法
!pciir
DLL
|
Windows NT 4.0
|
不可用
|
|
Windows 2000
|
Kdextx86.dll
|
|
Windows XP Windows Server 2003
|
Kdexts.dll
|
|
Windows Vista和之后
|
不可用
|
该扩展命令只能在未启用ACPI(Advanced Configuration and Power Interface)的x86目标机上使用。
附加信息
使用!acpiirqarb 扩展在启用ACPI的机器上查看类似信息。
关于PCI总线的信息,查看Windows Driver Kit (WDK)文档。
!pcitree
!pcitree 扩展显示PCI设备对象的信息,包括子PCI总线和CardBus总线,以及附加到他们上的设备。
语法
!pcitree
DLL
|
Windows NT 4.0
|
不可用
|
|
Windows 2000
|
Kdextx86.dll
|
|
Windows XP和之后
|
Kdexts.dll
|
注释
下面是一个示例:
kd> !pcitree
Bus 0x0 (FDO Ext fe517338)
0600 12378086 (d=0, f=0) devext fe4f4ee8 Bridge/HOST to PCI
0601 70008086 (d=d, f=0) devext fe4f4ce8 Bridge/PCI to ISA
0101 70108086 (d=d, f=1) devext fe4f4ae8 Mass Storage Controller/IDE
0604 00211011 (d=e, f=0) devext fe4f4788 Bridge/PCI to PCI
Bus 0x1 (FDO Ext fe516998)
0200 905010b7 (d=8, f=0) devext fe515ee8 Network Controller/Ethernet
0100 81789004 (d=9, f=0) devext fe515ce8 Mass Storage Controller/SCSI
0300 0519102b (d=10, f=0) devext fe4f4428 Display Controller/VGA
Total PCI Root busses processed = 1
要根据最后的设备显示来理解输出的内容。它的base class 为03、subclass 为00、Device ID 为0x0519,、Vendor ID 为0x102B。这些值是设备本身固有的。
"d="后面的数字是设备号;"f="后的数字是功能号(function number)。"devext"后是设备扩展的地址: 0xFE4F4428。最后显示base class 名字和subclass名字。
要获得某个设备的更多信息,可以使用!devext 扩展命令,并且将设备扩展地址作为参数。对这类设备,命令应该像下面一样:
kd> !devext fe4f4428 pci
如果!pcitree 扩展产生一个错误,通常意味着PCI符号没有正确的加载。使用.reload pci.sys来修正这个问题。
附加信息
查看Plug and Play调试来获得该扩展命令的应用。关于PCI总线和PCI设备对象的信息,查看 Windows Driver Kit (WDK)文档。
!pcm
!pcm 扩展显示指定的private cache map。该扩展仅在Windows 2000中可用。
语法
!pcm Address
参数
Address
指定private cache map的地址。
DLL
|
Windows NT 4.0
|
不可用
|
|
Windows 2000
|
Kdextx86.dll
|
|
Windows XP和之后
|
不可用(查看注释节)
|
注释
该扩展仅在Windwos 2000中支持。在Windows XP和之后的Windows中,可以使用dt nt!_PRIVATE_CACHE_MAP Address命令。
附加信息
关于缓存管理的信息,查看Microsoft Windows SDK 文档,以及Mark Russinovich 和David Solomon编写的Microsoft Windows Internals。
其他缓存管理命令的信息,可以查看!cchelp扩展的参考。
!pcr
!pcr 扩展显示指定处理器上的处理器控制域(Processor Control Region (PCR))的当前状态。
语法
!pcr [Processor]
参数
Processor
指定要获取哪个处理器的PCR信息。如果省略Processor,则使用当前处理器。
DLL
|
Windows NT 4.0
|
Kdextx86.dll
|
|
Windows 2000
|
Kdextx86.dll
|
|
Windows XP和之后
|
Kdexts.dll
|
注释
处理器控制块(PRCB)是PCR的一个扩展。可以通过!prcb 命令来显示。
下面是x86目标机上的!pcr扩展命令的示例:
kd> !pcr 0
KPCR for Processor 0 at ffdff000:
Major 1 Minor 1
NtTib.ExceptionList: 801626e0
NtTib.StackBase: 801628f0
NtTib.StackLimit: 8015fb00
NtTib.SubSystemTib: 00000000
NtTib.Version: 00000000
NtTib.UserPointer: 00000000
NtTib.SelfTib: 00000000
SelfPcr: ffdff000
Prcb: ffdff120
Irql: 00000000
IRR: 00000000
IDR: ffffffff
InterruptMode: 00000000
IDT: 80043400
GDT: 80043000
TSS: 803cc000
CurrentThread: 8015e8a0
NextThread: 00000000
IdleThread: 8015e8a0
DpcQueue: 0x80168ee0 0x80100d04 ntoskrnl!KiTimerExpiration
显示中的一个条目是中断请求级别(IRQL)。!pcr 扩展显示的是当前IRQL,但是通常对当前IRQL都不是很感兴趣。Bug check或者调试器连接之前的IRQL要更加有用一些。可以通过!irql来显示这种IRQL,但是只有针对运行Windows Server2003和之后版本Windows的机器才有用。
附加信息
关于PCR和PRCB的更多信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!pcrs
!pcrs 扩展命令显示Intel Itanium处理器的控制寄存器(control register)。
语法
!pcrs Address
参数
Address
指定processor control registers file的地址。
DLL
|
Windows NT 4.0
|
不可用
|
|
Windows 2000
|
不可用
|
|
Windows XP和之后
|
Kdexts.dll
|
该扩展命令只能对Itanium目标机使用。
注释
不要将!pcrs扩展和 !pcr 混淆,后者用来显示处理器控制域(processor control region)的当前状态。
!pfn
!pfn 扩展用于显示指定的页面帧(page frame)或者整个页面帧数据库(page frame database)。
语法
!pfn PageFrame
参数
PageFrame
指定要显示的页面帧的16进制序号。
DLL
|
Windows NT 4.0
|
Kdextx86.dll
|
|
Windows 2000
|
Kdextx86.dll
|
|
Windows XP和之后
|
Kdexts.dll
|
注释
可以通过!pte扩展获得某个虚拟地址的页面帧序号。
下面是该扩展的输出示例:
kd> !pte 801544f4
801544F4 - PDE at C0300800 PTE at C0200550
contains 0003B163 contains 00154121
pfn 3b G-DA--KWV pfn 154 G--A--KRV
kd> !pfn 3b
PFN 0000003B at address 82350588
flink 00000000 blink / share count 00000221 pteaddress C0300800
reference count 0001 color 0
restore pte 00000000 containing page 000039 Active
kd> !pfn 154
PFN 00000154 at address 82351FE0
flink 00000000 blink / share count 00000001 pteaddress C0200550
reference count 0001 color 0
restore pte 00000060 containing page 00003B Active M
Modified
附加信息
关于页表、页目录、页面帧的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!pmc
!pmc 扩展显示指定地址处的性能监控计数器(Performance Monitor Counter (PMC))寄存器。
该命令仅在Itanium目标机上支持。
语法
!pmc [- Option] Expression [DisplayLevel]
参数
Option
可以是下面这些值中任意一个:
gen
将该寄存器当作常规PMC寄存器显示。
btb
将该寄存器当作branch trace buffer (BTB) PMC寄存器进行显示。
Expression
指定PMC的16进制地址。可以使用表达式@kpfcgen 和@kpfcbtb 用作参数的值。
如果Expression 是@kpfcgen,调试器将当前处理器的PMC寄存器当作常规PMC寄存器显示。还可以通过将Option 设置为gen,并且Expression 值使用@kpfc4、@kpfc5、@kpfc6或者@kpfc7来将当前处理器的PMC寄存器作为常规PMC寄存器显示。
如果Expression 为@kpfcbtb,调试器将当前处理器的PMC寄存器当作BTB PMC寄存器显示。也可以通过Optio设置为btb,并且Expression 的值使用@kpfc12来当作BTB PMC寄存器显示。
DisplayLevel
可以是下面这些值中任意一个:
0
仅显示每个PMC寄存器字段的值。这是默认情况。
1
显示非保留和非忽略的PCM寄存器字段的详细信息。
2
显示所有PMC寄存器字段的详细信息,包括被忽略的和保留的。
DLL
|
Windows NT 4.0
|
不可用
|
|
Windows 2000
|
不可用
|
|
Windows XP和之后
|
Kdexts.dll
|
!pmssa
!pmssa 扩展显示指定的processor Minimal State Save Area (也称为Min-StateSave Area)。
该扩展命令仅在Itanium目标机上可用。
语法
!pmssa Address
参数
Address
指定某个processor Min-StateSave Area的地址。
DLL
|
Windows NT 4.0
|
不可用
|
|
Windows 2000
|
不可用
|
|
Windows XP和之后
|
Kdexts.dll
|
!pnpevent
!pnpevent 扩展显示即插即用(Plug and Play)设备事件队列。
语法
!pnpevent [DeviceEvent]
参数
DeviceEvent
指定要显示的设备事件(device event)的地址。如果为0或者省略,则显示该队列中所有设备事件的树(tree)。
DLL
|
Windows NT 4.0
|
不可用
|
|
Windows 2000
|
Kdextx86.dll
|
|
Windows XP和之后
|
Kdexts.dll
|
附加信息
查看Plug and Play调试获得该扩展命令的应用。关于Plug and Play驱动程序的信息,查看Windows Driver Kit (WDK) 文档。
!pocaps
!pocaps 扩展显示目标机的电源能力(power capability)。
语法
!pocaps
DLL
|
Windows NT 4.0
|
不可用
|
|
Windows 2000
|
Kdextx86.dll
|
|
Windows XP和之后
|
Kdexts.dll
|
注释
下面是该命令输出的示例:
kd> !pocaps
PopCapabilities @ 0x8016b100
Misc Supported Features: S4 FullWake
Processor Features:
Disk Features: SpinDown
Battery Features:
Wake Caps
Ac OnLine Wake: Sx
Soft Lid Wake: Sx
RTC Wake: Sx
Min Device Wake: Sx
Default Wake: Sx
附加信息
要查看系统的电源策略(power policy),可以使用!popolicy 扩展命令。关于电源能力和电源策略的更多信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!pool
!pool扩展显示指定的内存池分配的信息,或者整个系统范围内内存池的分配信息。
语法
!pool [Address [Flags]]
参数
Address
指定要显示的内存池入口。如果Address是 -1,该命令显示进程中所有堆(all heaps in the process)的信息。如果Address 为0或省略,命令显示进程堆(process heap)的信息。
Flags
指定显示的级别。可以是下面这些位值的任意组合,默认值为0:
Bit 0 (0x1)
显示内存池内容,而不仅仅是头部(pool header)。
Bit 1 (0x2)
(Windows 2000和之后) 不显示所有内存池的头信息,除了实际包含指定的Address的那个。
Bit 31 (0x80000000)
(Windows XP和之后) 不显示池类型(type)和标签(tag)。
DLL
|
Windows NT 4.0
|
Kdextx86.dll
|
|
Windows 2000
|
Kdextx86.dll
|
|
Windows XP和之后
|
Kdexts.dll
|
注释
在Windows XP和之后版本的Windows中,!pool 扩展显示每个分配关联的内存池标签(pool tag)。还会显示该标签的所有者。显示是基于pooltag.txt 文件的内容的。该文件位于Windwos调试工具包安装目录的triage 子目录下。如果需要的话,可以通过编辑该文件来添加自己的项目相关的其他pool tag。
警告 如果在当前版本安装的目录上安装Windwos调试工具包的升级版本,则它会覆盖该目录中所有文件,包括pooltag.txt。如果改变或者替换了示例的pooltag.txt,则要将它先保存到其他目录中。重新安装调试器之后,可以再用保存的那个pooltag.txt来进行覆盖。
如果!pool 扩展报告内存池破坏,应该使用!poolval来进行调查。
下面是一个例子。如果Address 指定0xE1001050,则显示这个块中的所有内存池的头部,并且0xE1001050本身用星号(*)标记。
kd> !pool e1001050
e1001000 size: 40 previous size: 0 (Allocated) MmDT
e1001040 size: 10 previous size: 40 (Free) Mm
*e1001050 size: 10 previous size: 10 (Allocated) *ObDi
e1001060 size: 10 previous size: 10 (Allocated) ObDi
e1001070 size: 10 previous size: 10 (Allocated) Symt
e1001080 size: 40 previous size: 10 (Allocated) ObDm
e10010c0 size: 10 previous size: 40 (Allocated) ObDi
.....
这个例子中,最右边的一列是pool tag。这一列左边显示这个pool是空闲的还是已分配的。
下面的命令显示内存池头部和内容(pool headers and pool contents):
kd> !pool e1001050 1
e1001000 size: 40 previous size: 0 (Allocated) MmDT
e1001008 ffffffff 0057005c 004e0049 004f0044
e1001018 ffffffff 0053005c 00730079 00650074
e1001040 size: 10 previous size: 40 (Free) Mm
e1001048 ffffffff e1007ba8 e1501a58 01028101
e1001058 ffffffff 00000000 e1000240 01028101
*e1001050 size: 10 previous size: 10 (Allocated) *ObDi
e1001058 ffffffff 00000000 e1000240 01028101
e1001068 ffffffff 00000000 e10009c0 01028101
e1001060 size: 10 previous size: 10 (Allocated) ObDi
e1001068 ffffffff 00000000 e10009c0 01028101
e1001078 ffffffff 00000000 00000000 04028101
......
附加信息
关于内存池的信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。