我可以禁用进程的未处理异常处理程序吗?
Can I disable the unhandled exception handler for a process?
我正在 SAP 系统上执行系统测试。 SAP 有时会崩溃,我想通过将虚拟机重置为以前保存的状态来从这些崩溃中恢复。
我的问题是我无法可靠地检测到此类崩溃。我已经创建了 WER LocalDumps 注册表项,但没有得到转储。
SAP 似乎注册了一个未处理的异常处理程序,并对不同类型的异常执行不同的任务。有时它会显示一个消息框并终止应用程序(例如,在出现压缩错误的情况下),有时它会出现所谓的短转储。
我对消息框和短转储都不感兴趣,所以我正在寻找一种方法来禁用 SAP 的未处理异常处理程序。这应该会启动 WER,它会写入转储文件,我可以采取措施重新启动我的系统测试。
出于性能原因,我不想在每次测试时都重新启动 VM。
我试过:
- 我对未处理的异常处理程序基本熟悉。我已成功将它们应用到我自己的 .NET 代码中。
- 我看了SetUnhandledExceptionFilter (MSDN)和类似的但是它只适用于调用过程,我不能修改SAP的代码。
- 我读到了 DisableUserModeCallbackFilter,但我认为它对我的情况没有帮助
我想知道是否有我可以激活的注册表设置(例如在 ImageFileExecutionOptions 中)或 Shim。
根据Hans Passant的评论(我认为是权威回答),
There is no boss override switch built into the operating system to stop it from doing this.
我终于在进程处于活动状态时将调试器附加到 SAP GUI。从启用所有异常开始,我缩小了条件,以便 WinDbg 在 SAP GUI 崩溃时中断(第一次机会,然后第二次机会)。
我正在 SAP 系统上执行系统测试。 SAP 有时会崩溃,我想通过将虚拟机重置为以前保存的状态来从这些崩溃中恢复。
我的问题是我无法可靠地检测到此类崩溃。我已经创建了 WER LocalDumps 注册表项,但没有得到转储。
SAP 似乎注册了一个未处理的异常处理程序,并对不同类型的异常执行不同的任务。有时它会显示一个消息框并终止应用程序(例如,在出现压缩错误的情况下),有时它会出现所谓的短转储。
我对消息框和短转储都不感兴趣,所以我正在寻找一种方法来禁用 SAP 的未处理异常处理程序。这应该会启动 WER,它会写入转储文件,我可以采取措施重新启动我的系统测试。
出于性能原因,我不想在每次测试时都重新启动 VM。
我试过:
- 我对未处理的异常处理程序基本熟悉。我已成功将它们应用到我自己的 .NET 代码中。
- 我看了SetUnhandledExceptionFilter (MSDN)和类似的但是它只适用于调用过程,我不能修改SAP的代码。
- 我读到了 DisableUserModeCallbackFilter,但我认为它对我的情况没有帮助
我想知道是否有我可以激活的注册表设置(例如在 ImageFileExecutionOptions 中)或 Shim。
根据Hans Passant的评论(我认为是权威回答),
There is no boss override switch built into the operating system to stop it from doing this.
我终于在进程处于活动状态时将调试器附加到 SAP GUI。从启用所有异常开始,我缩小了条件,以便 WinDbg 在 SAP GUI 崩溃时中断(第一次机会,然后第二次机会)。