【发布时间】:2011-03-27 18:11:21
【问题描述】:
WinDbg 中是否有任何方法可以确定 Windows 线程从什么日期/时间被 WaitForSingleObjects 或 WaitForMultipleObjects 等函数阻塞?
我知道如何在内核调试中执行此操作(使用!thread),但我不知道如何在用户模式调试中执行此操作。
【问题讨论】:
WinDbg 中是否有任何方法可以确定 Windows 线程从什么日期/时间被 WaitForSingleObjects 或 WaitForMultipleObjects 等函数阻塞?
我知道如何在内核调试中执行此操作(使用!thread),但我不知道如何在用户模式调试中执行此操作。
【问题讨论】:
在WinDbg中,你可以使用!runaway来获取线程计时:
!runaway
!runaway 1
(用户时间)
!runaway 2
(内核时间)
!runaway 4
(经过的时间)
(在某些地方,您会发现这些记录为 0、1 和 2,但根据我的经验,它们不起作用。可能取决于 WinDbg 版本或其他什么...)
您可以通过从线程经过的时间中减去线程的用户时间和内核时间来计算挂起所花费的时间,但不幸的是,我不知道有任何方法(除了编写 WinDbg 插件之外)可以让 WinDbg 为您执行此操作。
如果您没有设置 WinDbg,您可以使用 Process Explorer 获取相同的信息。当您右键单击一个进程并在属性对话框中选择线程选项卡时,您将获得该进程中所有线程的列表。选择特定线程将显示相同的时间信息等。
【讨论】: