【问题标题】:Collect dumps during Windows power events在 Windows 电源事件期间收集转储
【发布时间】:2018-07-09 17:54:34
【问题描述】:

我的应用程序是一个为操作系统电源事件注册的 Win32 服务。当应用程序获取事件回调时,根据电源事件的类型执行操作。在挂起/睡眠事件期间,我们的应用程序会在确认操作系统继续挂起操作之前的 10 秒内尝试执行特定的网络作业。

在正常情况下,我的应用程序会在 10 秒内成功完成工作。但有时,操作耗时过长,无法在 10 秒内完成。应用程序使用各种 Win32 API 函数,我想检查导致延迟的特定操作。当系统要挂起时,是否有任何方法可以捕获在完成作业时挂起的进程转储?

我尝试过 ProcMon、ProcExplorer、ProcDump,但没有帮助。除了在代码中添加日志之外,关于解决问题的任何想法。谢谢。

【问题讨论】:

  • 您可以在程序中使用假电源事件(这样系统就不会进入睡眠状态),然后使用正常的调试方法来查看它卡在哪里。
  • 因为它是网络相关的应用程序,操作系统可能会使用套接字、QOS 服务等做其他事情,不确定是否允许代码通过睡眠动作流动(即使操作系统实际上并没有进入睡眠状态)会有帮助的。
  • 在代码中添加日志听起来不错。你觉得你需要多少?毕竟,当你,咳咳,拿你的转储时,捕捉当前正在执行的任何事情可能不会告诉你太多 - 也许致命的延迟更早,然后在地毯被拉出之前还有几毫秒可以做更多的事情在你之下。所以,也许不是延迟,而是延迟

标签: c++ windows events service suspend


【解决方案1】:

Windbg Preview Microsoft 商店提供的工具对于捕获任何正在运行的进程的跟踪非常有帮助。我的用例是在操作系统休眠时捕获我的进程的踪迹。当操作系统实际处于休眠状态时,该跟踪可用于时间旅行调试我的应用程序。来自微软的一个非常有用的工具。 Channel 9 上有关如何使用该工具的教程。快乐学习:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2015-02-13
    • 1970-01-01
    • 2020-03-02
    • 2020-10-04
    • 1970-01-01
    相关资源
    最近更新 更多