我在从 java exe 调用的 C++ 代码中创建了一个空取消引用。 AeDebug 注册表项是使用记事本设置的(用于测试)。但是,应用程序崩溃不会启动记事本。 附加windbg,发现jvm有系统调用的异常处理程序,该处理程序终止进程。
...
jvm!c2v_getThreadLocalLong+0x212268
ntdll!RtlpExecuteHandlerForException+0xd
ntdll!RtlDispatchException+0x373
ntdll!KiUserExceptionDispatch+0x3a
...
我知道 -XX:OnError vm arg 会在崩溃时运行任何 cmd,但它不适合我的使用,因此我需要在 AeDebug 中设置 cmd 来触发。
如何在不触发AeDebug键中设置的cmd的情况下防止jvm终止进程
添加
-XX:+UseOSErrorReporting
JVM 选项将崩溃传播到操作系统错误处理程序。在这种情况下,Windows 应调用 AeDebug
注册表项中指定的调试器命令。
或者,您可以使用
-XX:+ShowMessageBoxOnError
选项。当发生崩溃时,JVM 将冻结进程并显示一个对话框,邀请您手动附加调试器。