windows - 使用用户模式转储确定 WinDbg 中的线程等待时间

标签 windows debugging windbg

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

我知道如何在内核调试中执行此操作(使用 !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/

相关文章:

在 qemu 中使用 GDB 调试 Linux 内核无法命中函数或给定地址

windows - isZoomed() 功能在我的客户端代码中不起作用

c# - 元素不存在或被虚拟化;如果支持,请使用 VirtualizedItem Pattern

android - 无法在 Windows 7 上安装 Android USB 驱动程序

ajax - 调试:IE6 + SSL + AJAX + post form = 404错误

windows - 从完整内存转储中提取进程转储

.net - 我可以在不附加VS调试器的情况下从CLR异常获取堆栈跟踪信息吗?

windows - GFlags 设置以捕获堆损坏(Page Heap 除外)?

c++ - Windows中给进程分配内存时,是否总是会触发页面错误?

windows - 如何在批处理文件中正确限制 IF 命令?