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

use*_*228 6 windows multithreading kernel windbg

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

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

谢谢.

Ana*_*tts 7

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

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

从内核模式开始,这个语句没有多大意义.你能描述一下你的场景是什么吗?

编辑:啊,现在我明白了.你想知道你现在在哪个线程.给!thread一展身手.

  • 对于记录,它应该是!process 0 2来显示每个进程的线程.如果你还想要一个堆栈跟踪,你可以使用!process 0 6.这会变得非常冗长,所以我建议提供一个特定的进程来查看而不是使用0. (2认同)

sno*_*one 6

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

0: kd> r @$thread
$thread=fffff80002c02cc0
Run Code Online (Sandbox Code Playgroud)

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

0: kd> ?? @$thread->Cid
struct _CLIENT_ID
   +0x000 UniqueProcess    : 0x00000000`00001408 Void
   +0x008 UniqueThread     : 0x00000000`0000144c Void
Run Code Online (Sandbox Code Playgroud)

斯科特