我有一个用C++编写的Windows应用程序偶尔会蒸发.我使用蒸发这个词,因为没有任何遗留下来:没有来自Windows的"我们很抱歉"的消息,没有来自Dr. Watson工厂的崩溃转储......
有一次,在调试器下发生了崩溃,调试器没有中断 - 它显示应用程序仍在运行.当我手动暂停执行时,我发现我的进程不再有任何线程.
如何捕获此过程终止的原因?
我正在调试一个应用程序,该应用程序在其消息循环中调用IsDialogMessage()。有时, IsDialogMessage() 永远不会返回(其中 never 是大于 1 小时的间隔)。根据 Microsoft 符号服务器提供的 user32.dll 符号,它似乎卡在GetNextDlgGroupItem()(或相同的内部变体)中,在某些窗口集上迭代。
该应用程序是多线程的,并且经常接收外部事件的通知,这些通知作为 DCOM 调用到达。我怀疑这样的调用处理不当会破坏某些窗口状态。如果我可以了解哪种状态损坏可能会导致 IsDialogMessage() 中的无限循环,我想我将能够更轻松地识别损坏的来源。