C++ 在Windows电源事件期间收集转储

C++ 在Windows电源事件期间收集转储,c++,windows,events,service,suspend,C++,Windows,Events,Service,Suspend,我的应用程序是一个Win32服务,它是为OS电源事件注册的。当应用程序获得事件回调时,将根据电源事件的类型执行操作。在挂起/睡眠事件期间,我们的应用程序尝试在确认操作系统继续挂起操作之前的10秒内执行特定的网络作业 在正常情况下,我的申请在10秒内成功完成。但有时,操作时间太长,无法在10秒内完成。应用程序使用各种Win32 API函数,我想检查导致延迟的具体操作。当系统将要挂起时,是否仍然可以捕获在完成作业时挂起的进程转储 我试过ProcMon、ProcExplorer和ProcDump,但都

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

在正常情况下,我的申请在10秒内成功完成。但有时,操作时间太长,无法在10秒内完成。应用程序使用各种Win32 API函数,我想检查导致延迟的具体操作。当系统将要挂起时,是否仍然可以捕获在完成作业时挂起的进程转储


我试过ProcMon、ProcExplorer和ProcDump,但都没用。除了在代码中添加日志之外,还有其他解决问题的方法吗。谢谢。

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

您可以在程序中使用一个电源事件(这样系统就不会进入睡眠状态),然后使用正常的调试方法查看它被卡住的地方。由于它是与网络相关的应用程序,操作系统可能会对套接字、QOS服务等执行其他操作,不确定是否允许代码通过睡眠操作(即使操作系统实际上没有进入睡眠状态)将有帮助。在代码中添加日志对我来说很好。你认为你需要多少日志?毕竟,捕获当前正在执行的任何事件,当你,嗯,获取转储时,可能不会告诉你太多-可能致命的延迟是更早的,然后还有几毫秒的时间来做更多的事情,然后地毯从你下面被拉出.所以,也许不是延迟,而是延迟。