【问题标题】:In windbg, is there any way to sort the threads based on the last activity?在windbg中,有没有办法根据最后一个活动对线程进行排序?
【发布时间】:2020-08-01 13:57:33
【问题描述】:

我们的应用程序间歇性地挂起。我们得到了内存转储,我把它加载到了windbg。它在windbg中显示了100多个线程。

我想知道在挂起发生之前最近执行的线程是什么。所以我想根据最后一个活动对线程进行排序。有什么方法/命令可以检查吗?

【问题讨论】:

  • 对不起,为什么这个问题被否决了?在投反对票之前至少给出一些解释?
  • 调试挂起转储需要大量经验,并且“根据上次活动对线程进行排序”并不是真正必要的。在没有实际看到垃圾场的情况下,我认为无法讨论更多内容。 Stack Overflow 不太可能是解决此类问题的好地方。您最好升级为团队中的资深人员,或者直接向 Microsoft 提出支持案例。
  • 您可以尝试!analyze -v -hang,但如果这没有告诉您任何信息,您可能需要查看 Windows 性能记录器/分析器。它更适合告诉您线程/进程正在等待什么,但请注意,这是一个陡峭的学习曲线。我建议从 bruce dawson(我认为)下载 wprui 以抢占先机。

标签: debugging windbg


【解决方案1】:

您所描述的内容通常称为time travel debugging。不幸的是,如果没有第一个 recording a trace,就无法看到线程是如何执行的。

您可以使用!runaway 命令,该命令将显示自进程启动以来按执行时间排序的线程列表。这至少可以让您了解哪些线程正在完成大部分工作。

除了这些技巧之外,Lieven Keersmaekers 提到的!analyze -v 始终是找出进程挂起原因的良好起点。在某些情况下,!locksDebugDiag 可以提供有关挂起时程序状态的一些有用信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-27
    • 2019-06-06
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多