【问题标题】:Determine thread wait time in WinDbg with user-mode dump使用用户模式转储确定 WinDbg 中的线程等待时间
【发布时间】:2011-03-27 18:11:21
【问题描述】:

WinDbg 中是否有任何方法可以确定 Windows 线程从什么日期/时间被 WaitForSingleObjectsWaitForMultipleObjects 等函数阻塞?

我知道如何在内核调试中执行此操作(使用!thread),但我不知道如何在用户模式调试中执行此操作。

【问题讨论】:

    标签: windows debugging windbg


    【解决方案1】:

    在WinDbg中,你可以使用!runaway来获取线程计时:

    !runaway
    !runaway 1
    

    (用户时间)

    !runaway 2
    

    (内核时间)

    !runaway 4
    

    (经过的时间)

    (在某些地方,您会发现这些记录为 0、1 和 2,但根据我的经验,它们不起作用。可能取决于 WinDbg 版本或其他什么...)

    您可以通过从线程经过的时间中减去线程的用户时间和内核时间来计算挂起所花费的时间,但不幸的是,我不知道有任何方法(除了编写 WinDbg 插件之外)可以让 WinDbg 为您执行此操作。

    如果您没有设置 WinDbg,您可以使用 Process Explorer 获取相同的信息。当您右键单击一个进程并在属性对话框中选择线程选项卡时,您将获得该进程中所有线程的列表。选择特定线程将显示相同的时间信息等。

    【讨论】:

    • 我真正想知道的是:因为什么日期和时间是 WaitFor*() 函数阻塞的线程?对不起,这个不精确的问题;我现在已将“多久”更改为“从什么日期/时间开始”。无论如何,非常感谢您的回复。
    • 据我所知这是不可能的。当然,如果是您自己的应用程序,您可以在等待某事之前记录当前时间,然后使用 WinDbg 检查您保存它的变量,或者将其打印到日志或其他内容中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多