捕获不可见线程的未处理异常 在我的C++应用程序中,我使用一个运行自己线程(或者几个我不知道)的ActiveX组件。有时此组件会引发异常。我希望捕获这些异常并进行恢复,而不是使整个应用程序崩溃。但由于我无法访问它的源代码或线程,我不确定该如何操作

捕获不可见线程的未处理异常 在我的C++应用程序中,我使用一个运行自己线程(或者几个我不知道)的ActiveX组件。有时此组件会引发异常。我希望捕获这些异常并进行恢复,而不是使整个应用程序崩溃。但由于我无法访问它的源代码或线程,我不确定该如何操作,c++,multithreading,C++,Multithreading,我能想到的唯一解决方案是在它自己的进程中运行它。使用CreateProcess和CreateRemoteThread之类的东西,不确定如何实现它 关于如何解决这个问题有什么建议吗?如果ActiveX组件正在启动自己的线程,那么您可以做的事情就不多了。您可以设置一个全局异常处理程序并尝试吞咽异常,但这极有可能导致您的程序状态损坏,并导致奇怪的“不可能”崩溃 在单独的进程中运行bug组件是最健壮的解决方案,因为您可以在不损害自己的程序状态的情况下识别致命错误并从中恢复。如果ActiveX组件正在启动

我能想到的唯一解决方案是在它自己的进程中运行它。使用CreateProcess和CreateRemoteThread之类的东西,不确定如何实现它


关于如何解决这个问题有什么建议吗?

如果ActiveX组件正在启动自己的线程,那么您可以做的事情就不多了。您可以设置一个全局异常处理程序并尝试吞咽异常,但这极有可能导致您的程序状态损坏,并导致奇怪的“不可能”崩溃


在单独的进程中运行bug组件是最健壮的解决方案,因为您可以在不损害自己的程序状态的情况下识别致命错误并从中恢复。

如果ActiveX组件正在启动自己的线程,那么您可以做的事情就不多了。您可以设置一个全局异常处理程序并尝试吞咽异常,但这极有可能导致您的程序状态损坏,并导致奇怪的“不可能”崩溃



在单独的进程中运行错误组件是最健壮的解决方案,因为您可以在不损害自己的程序状态的情况下识别致命错误并从中恢复。

尝试使用SetUnhandledExceptionFilter()设置异常筛选器。

尝试使用SetUnhandledExceptionFilter()设置异常筛选器.

然后问题就变成了。我如何创建一个新进程,然后注入它应该运行的代码?您现在如何托管ActiveX组件?如果您已经知道有一个命令行程序可以为您托管它,那么只需启动它。否则,您可以编写一个自己的小型主机,其中只包含运行所需内容的最小值。在不了解应用程序的体系结构的情况下,我不能说更多。它是一个FlashActiveX组件,我使用它来渲染应用程序处理的帧。它使用COM和ATL进行托管(我不是编写托管包装器的人,对其细节了解有限)。我不知道有哪个命令行程序可以为我托管它。如果我理解正确的话,实现这一目标的唯一方法是启动一个外部程序?编辑:请参见FlashAxContainer和FlashProducer@ronag你有没有办法解决以下问题case@ronag问题就变成了。我如何创建一个新进程,然后注入它应该运行的代码?您现在如何托管ActiveX组件?如果您已经知道有一个命令行程序可以为您托管它,那么只需启动它。否则,您可以编写一个自己的小型主机,其中只包含运行所需内容的最小值。在不了解应用程序的体系结构的情况下,我不能说更多。它是一个FlashActiveX组件,我使用它来渲染应用程序处理的帧。它使用COM和ATL进行托管(我不是编写托管包装器的人,对其细节了解有限)。我不知道有哪个命令行程序可以为我托管它。如果我理解正确的话,实现这一目标的唯一方法是启动一个外部程序?编辑:请参见FlashAxContainer和FlashProducer@ronag你有没有办法解决以下问题case@ronag它会抛出什么样的异常?您确定不是您的代码出了问题(例如,将无效数据(尤其是指针)传递到组件)?它可能引发各种异常。由于它是一个flash activeX组件,它可以根据加载的flash文件引发异常。我无法控制。这是最常见的访问冲突异常。它会抛出什么样的异常?您确定不是您的代码出了问题(例如,将无效数据(尤其是指针)传递到组件)?它可能引发各种异常。由于它是一个flash activeX组件,它可以根据加载的flash文件引发异常。我无法对此进行任何控制。这是最常见的访问冲突异常。我如何知道异常的来源,以便进行适当的恢复?您可以使用MiniDumpWriteDump()进行核心转储(请参阅)或使用AfxDumpStack()进行堆栈跟踪(请参阅)。您好,我有一个使用flash Actve x控制器的MFC应用程序。如果我编写了应用程序级异常SetUnhandledExceptionFilter(),对我来说没有帮助。并且它会从activex控制器的回调中崩溃access valilotion Exception。对于按钮操作,它使用ProcessWndProception回调方法正确处理。。。。我的意图是,我需要从两个相同的地方捕获异常。如何从side主进程中的任何线程抛出所有未处理的异常。@Srinivas——这可能是一个新问题。ActiveX是COM(公共对象模块)。COM对象可以在与客户端程序相同的进程空间(inproc)中运行,也可以在单独的进程空间(outproc)中运行。你知道这是哪一个吗?如果是outproc,我怀疑是否有任何方法可以捕获异常,但COM并不是我的专长。ActiveX异常是否跨编组接口传播?我不希望它这样做。一些代码和一些适当的诊断(错误消息、堆栈跟踪等)会有所帮助。它不是从接口传播的。只是提供Access Valitation异常。我如何知道异常起源于何处,以便进行适当的恢复?您可以使用MiniDumpWriteDump()进行核心转储(请参阅)或使用AfxDumpStack()进行堆栈跟踪(请参阅)。您好,我有一个使用flash Actve x controller的MFC应用程序。如果我已编写应用程序级异常SetUnhandledExc