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

g52tjvyc  于 2023-06-07  发布在  Windows
关注(0)|答案(2)|浏览(351)

有没有人知道如何在内核调试时列出WinDbg中的所有线程。我发现旧的参考资料说~,但这不起作用。
具体来说,我希望找到导致事件(即断点)的线程的ID。

3wabscal

3wabscal1#

~仅在用户模式下工作。要列出系统上的所有线程,我记得是!process 0 1(已经有一段时间了)。
具体而言,我将查找导致事件(即断点)的线程的ID。
从内核模式执行此语句没有多大意义。你能详细描述一下你的场景吗?

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

iezvtpos

iezvtpos2#

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

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

如果你想要线程的ID,你需要从ETHREAD中挖掘出来。幸运的是,如果你使用C++求值器,@$thread被类型化为一个指向ETHREAD的指针:

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

相关问题