如果您没有源代码,那么除了查看其callstack(k
或!sosex.mk
或!clrstack
或!eestack
)之外,有一种方法可以告诉一个线程目前在等待队列中等待发生的事情,比如等待接收I / O中断或来自I / O完成端口的通知吗?
或者可能只是一个没有等待 on 的休眠线程,但是仍然在等待队列中的那个还没有?
为了测试,我制作了一个小型的C#程序,让我在线程中休眠20秒。
main()
{
Thread.Sleep(20000);
}
我将Windbg附加到其进程中。并检查其线程状态,并且休眠线程报告线程状态为0x202a020
:
00:00> !threadstate 202a020
Legal to Join
CoInitialized
In Multi Threaded Apartment
Fully initialized
Interruptible
我理解每个状态标志,除了我不是很清楚最后一个,即可中断。我的猜测是 Interruptible 标志只是表明线程可能被任何内核级中断中断,但并不一定表明它在等待队列中。即使是正在运行的状态线程也可能被中断,对吧?
那么,是否有一种万无一失的方法来了解一个线程目前是否在等待队列中?或者即使它位于就绪队列但尚未运行?