如何在WinDbg中列出线程(内核调试)

时间:2011-12-24 06:42:43

标签: windows multithreading kernel windbg

有没有人知道如何在内核调试时列出WinDbg中的所有线程。我发现旧的参考文献说'〜',但这不起作用。

具体来说,我希望找到导致事件的线程的ID,即断点。

感谢。

2 个答案:

答案 0 :(得分:6)

~仅适用于用户模式。要列出系统中的所有线程,我记得!process 0 1(已经过了一段时间)。

  

“具体来说,我希望找到导致事件的线程的ID,即断点。”

从内核模式开始,这个语句没有多大意义。您能详细描述一下您的情景是什么吗?

编辑:啊,现在我明白了。你想知道你现在在哪个线程。给!thread一个去吧。

答案 1 :(得分:5)

您始终可以使用@ $ thread伪寄存器来引用当前线程对象:

0: kd> r @$thread
$thread=fffff80002c02cc0

如果你想要线程的ID,你需要把它从ETHREAD中挖出来。幸运的是,如果您正在使用C ++评估程序,@ $线程将被键入为指向ETHREAD的指针:

0: kd> ?? @$thread->Cid
struct _CLIENT_ID
   +0x000 UniqueProcess    : 0x00000000`00001408 Void
   +0x008 UniqueThread     : 0x00000000`0000144c Void

-Scott