我正在通过强制进行完整的内存转储(ctrl + scrl + scrl 方法)来调试系统挂起/冻结问题,但我不了解某些数据。
当我运行 !exqueue 6 时,我看到 6 个关键线程、8 个延迟线程和 1 个超临界线程,但每个线程都包含一个类似的堆栈,只有以下调用:
nt!KiSwapContext+0x7a
nt!KiCommitThreadWait+0x1d2
nt!KeRemoveQueueEx+0x323
nt!ExpWorkerThread+0xe9
nt!PspSystemThreadStartup+0x5a
nt!KxStartSystemThread+0x16
据我所知,这些都是创建但没有进行任何工作的线程,对吧?
这是转储时系统上实际发生的情况,还是只是使用此方法强制转储的效果?
这也是为什么在空闲 PID 和断点下唯一运行的线程实际上是 intelppm 的原因吗?
[fffff80003617180 Idle]
0.000000 fffff80003616cc0 ffff8835 RUNNING nt!KeBugCheckEx
0.000000 fffff880009f9fc0 ffff92bb RUNNING intelppm!MWaitIdle+0x19
0.000000 fffff88002f6ffc0 ffff9191 RUNNING intelppm!MWaitIdle+0x19
0.000000 fffff88002fe1fc0 ffff93c4 RUNNING intelppm!MWaitIdle+0x19
在转储时,我似乎并没有真正准确地了解工作队列或正在运行的线程。我是误解了数据还是因为它是如何被捕获的?
任何帮助,将不胜感激。