在 WinDbg 中是否有任何方法可以确定自什么日期/时间起 Windows 线程被 WaitForSingleObjects
或 WaitForMultipleObjects
等函数阻塞?
我知道如何在内核调试中执行此操作(使用 !thread
),但我不知道如何在用户模式调试中执行此操作。
最佳答案
在 WinDbg 中,您可以使用 !runaway
来获取线程计时:
!runaway
!runaway 1
(用户时间)
!runaway 2
(内核时间)
!runaway 4
(耗时)
(您会发现这些在某些地方被记录为 0、1 和 2,但根据我的经验,它们不起作用。可能取决于 WinDbg 版本或其他...)
您可以通过从耗时中减去线程的用户和内核时间来计算挂起时间,但不幸的是,我不知道有什么方法(除了编写 WinDbg 插件)让 WinDbg 为您做这件事。
如果你没有在 WinDbg 上设置,你可以使用 Process Explorer得到相同的信息。当您右键单击一个进程并在属性对话框中选择线程选项卡时,您将获得该进程中所有线程的列表。选择特定线程将显示相同的计时信息等。
关于windows - 使用用户模式转储确定 WinDbg 中的线程等待时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5451216/