【发布时间】:2012-01-27 05:36:10
【问题描述】:
有谁知道在内核调试时如何列出 WinDbg 中的所有线程。我发现较旧的参考文献说“~”,但这不起作用。
具体来说,我正在寻找导致事件的线程的 ID,即断点。
谢谢。
【问题讨论】:
标签: windows multithreading kernel windbg
有谁知道在内核调试时如何列出 WinDbg 中的所有线程。我发现较旧的参考文献说“~”,但这不起作用。
具体来说,我正在寻找导致事件的线程的 ID,即断点。
谢谢。
【问题讨论】:
标签: windows multithreading kernel windbg
~ 仅在用户模式下工作。要列出系统上的所有线程,我记得是!process 0 1(已经有一段时间了)。
“具体来说,我正在寻找导致事件的线程的 ID,即断点。”
这个语句在内核模式下没有多大意义。你能详细描述一下你的场景是什么吗?
编辑:啊,现在我明白了。你想知道你现在在哪个线程。试试看!thread。
【讨论】:
你总是可以使用@$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
-斯科特
【讨论】: