我可以禁用进程的未处理异常处理程序吗?

Posted

技术标签:

【中文标题】我可以禁用进程的未处理异常处理程序吗?【英文标题】:Can I disable the unhandled exception handler for a process? 【发布时间】:2015-09-15 09:18:59 【问题描述】:

我正在 SAP 系统上执行系统测试。 SAP 有时会崩溃,我想通过将虚拟机重置为之前保存的状态来从这些崩溃中恢复。

我的问题是我无法可靠地检测到此类崩溃。我已经创建了 WER LocalDumps 注册表项,但我没有得到转储。

SAP 似乎注册了一个未处理的异常处理程序,并对不同类型的异常执行不同的任务。有时它会显示一个消息框并终止应用程序(例如,在压缩错误的情况下),有时它会伴随所谓的 Short Dump。

我对消息框和短转储都不感兴趣,所以我正在寻找一种方法来禁用 SAP 的未处理异常处理程序。这应该会打开 WER,它会写入转储文件,我可以采取措施重新启动系统测试。

出于性能原因,我不想在每次测试时都重新启动 VM。

我试过了:

我基本上熟悉未处理的异常处理程序。我已成功地将它们应用到我自己的 .NET 代码中。 我查看了SetUnhandledExceptionFilter (MSDN) 和类似的,但它仅适用于调用进程,我无法修改 SAP 的代码。 我阅读了有关 DisableUserModeCallbackFilter 的信息,但我认为这对我的情况没有帮助

我想知道是否有我可以激活的注册表设置(例如在 ImageFileExecutionOptions 中)或 Shim。

【问题讨论】:

基本问题是SAP调用SetUnhandledExceptionFilter()。并且做自己的事情,所有的大程序都这样做。操作系统中没有内置的老板覆盖开关来阻止它这样做。也许 SAP 有,用电话吧。 【参考方案1】:

根据Hans Passant的评论(我认为这是权威答案),

操作系统中没有内置的老板覆盖开关来阻止它这样做。

我终于在进程处于活动状态时将调试器附加到 SAP GUI。从启用所有异常开始,我缩小了条件,以便在 SAP GUI 崩溃时 WinDbg 会中断(第一次机会,然后是第二次机会)。

【讨论】:

以上是关于我可以禁用进程的未处理异常处理程序吗?的主要内容,如果未能解决你的问题,请参考以下文章

OWIN / Katana 的未处理异常全局处理程序?

某些内存位置的未处理异常

C#、MAF、单独 AppDomain 中的未处理异常管理

XmlDocument.Save 从 GC 线程抛出的未处理异常

FM.dll 中发生 System.Exception 类型的未处理异常

未知模块中发生“System.IO.FileNotFoundException”类型的未处理异常