有没有人知道如何在内核调试时列出WinDbg中的所有线程。我发现旧的参考文献说'〜',但这不起作用。
具体来说,我希望找到导致事件的线程的ID,即断点。
感谢。
答案 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