NetRoc's Blog

N-Tech

 

WinDbg 文档翻译----83

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)

显示中包含原始字节格式的信息。如果设置了MinAddressMaxAddress,或者标志的位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 [- OptionExpression [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

posted on 2008-07-30 14:57 NetRoc 阅读(752) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。

导航

统计

常用链接

留言簿(7)

随笔档案(99)

文章分类(35)

文章档案(32)

Friends

Mirror

搜索

最新评论

阅读排行榜

评论排行榜