Debugging Tools for Windows

!running

!running扩展命令显示目标机上所有处理器上正在运行的线程的列表。

语法

!running [-i] [-t

参数

-i
显示中也包含空闲处理器(idle processor)。
-t
显示每个处理器上的调用堆栈。

DLL

Windows 2000 不可用
Windows XP和之后 Kdexts.dll

注释

不带参数时,!running会显示所有活动处理器和空闲处理器的亲和性(affinity)。对于所有的活动处理器,还会显示处理器控制块(PRCB)的当前和下一线程字段,以及16个内置的排队自旋锁的状态。

下面是一个Itanium多处理器系统的示例:

0: kd> !running
 
System Processors 3 (affinity mask)
  Idle Processors 0
 
     Prcb              Current           Next
  0  e0000000818f8000  e0000000818f9e50  e0000000866f12f0  ................
 1  e000000086f16010  e00000008620ebe0  e000000086eddbc0  .O..............

每行末尾的16个字符是用来表示内置排队自旋锁的(PRCB 中的LockQueue)。点号( . )表示这个锁没有使用, O表示这个锁被该处理器拥有, W表示处理器排队在这个锁上。要查看自旋锁队列的更多信息,可以使用!qlocks

下面的例子显示了活动和空闲处理器,以及它们的调用堆栈:

0: kd> !running -it
 
System Processors f (affinity mask)
  Idle Processors f
All processors idle.
 
     Prcb      Current   Next
  0  ffdff120  805495a0            ................
 
ChildEBP RetAddr
8053e3f0 805329c2 nt!RtlpBreakWithStatusInstruction
8053e3f0 80533464 nt!_KeUpdateSystemTime+0x126
ffdff980 ffdff980 nt!KiIdleLoop+0x14
 
  1  f87e0120  f87e2e60            ................
 
ChildEBP RetAddr
f87e0980 f87e0980 nt!KiIdleLoop+0x14
 
  2  f87f0120  f87f2e60            ................
 
ChildEBP RetAddr
f87f0980 f87f0980 nt!KiIdleLoop+0x14
 
  3  f8800120  f8802e60            ................
 
ChildEBP RetAddr
f8800980 f8800980 nt!KiIdleLoop+0x14

附加信息

关于调试多处理器计算机的信息,查看多处理器语法

Build machine: CAPEBUILD