有没有人知道如何在内核调试时列出WinDbg中的所有线程。我发现旧的参考资料说~,但这不起作用。具体来说,我希望找到导致事件(即断点)的线程的ID。
~
3wabscal1#
~仅在用户模式下工作。要列出系统上的所有线程,我记得是!process 0 1(已经有一段时间了)。具体而言,我将查找导致事件(即断点)的线程的ID。从内核模式执行此语句没有多大意义。你能详细描述一下你的场景吗?
!process 0 1
**编辑:**啊,现在我明白了。你想知道你现在在哪个线程。给予!thread一个机会。
!thread
iezvtpos2#
您可以始终使用@$thread伪寄存器来引用当前线程对象:
@$thread
0: kd> r @$thread $thread=fffff80002c02cc0
如果你想要线程的ID,你需要从ETHREAD中挖掘出来。幸运的是,如果你使用C++求值器,@$thread被类型化为一个指向ETHREAD的指针:
ETHREAD
0: kd> ?? @$thread->Cid struct _CLIENT_ID +0x000 UniqueProcess : 0x00000000`00001408 Void +0x008 UniqueThread : 0x00000000`0000144c Void
2条答案
按热度按时间3wabscal1#
~
仅在用户模式下工作。要列出系统上的所有线程,我记得是!process 0 1
(已经有一段时间了)。具体而言,我将查找导致事件(即断点)的线程的ID。
从内核模式执行此语句没有多大意义。你能详细描述一下你的场景吗?
**编辑:**啊,现在我明白了。你想知道你现在在哪个线程。给予
!thread
一个机会。iezvtpos2#
您可以始终使用
@$thread
伪寄存器来引用当前线程对象:如果你想要线程的ID,你需要从ETHREAD中挖掘出来。幸运的是,如果你使用C++求值器,
@$thread
被类型化为一个指向ETHREAD
的指针: