2023-01-20 270
我正在开发一个C ++程序(Win32,MS Visual Studio 2008),该程序通过JNI创建JNI的JNI 在这里.它的工作正常很长一段时间,Java 6和Java 7.
今天,我安装了JRE的新版本;安装程序中出现了问题,JRE腐败了.我注意到我的C ++程序没有启动,也不会发出任何警告消息.调试程序表明它成功运行,直到JNI_CreateJavaVM呼叫为止.但是调用JNI_CreateJavaVM会导致该程序立即终止.没有返回值,没有错误消息,什么也没有.
是的,我知道我只需要重新安装JRE即可.但是尽管如此,我还是希望我的C ++程序为这种情况做好准备.如果无法创建Java VM,则应显示一条消息”请重新安装JRE”.但是我没有机会显示该消息,因为整个程序都在终止.
是否有一种方法可以在第三方库中检测JRE或更普遍的JRE中的此类错误?我尝试使用c ++ try/catch构造,我尝试使用信号函数 – 无济于事;该程序消失了而无需致电任何接收器或信号处理程序.
有没有办法检测这种JRE崩溃?或者:有没有办法可靠地检测到第三方库中的崩溃或终止?
如果您使用的是Linux/unix:这是我通常以:
开始的.
struct sigaction sa;
sa.sa_handler = bt_sighandler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
sigaction(SIGSEGV, &sa, NULL);
sigaction(SIGUSR1, &sa, NULL);
如果您在Windows上使用Microsoft C ++:_ try/ _Except通常会解决这个问题.这是MSVC扩展程序(您可以从双重下划线中分辨),它扩展了标准的尝试/捕获.
尝试/捕获捕获C ++异常,_ try/ _Except将捕获所有其他未手动异常(com,win32,…).例如,它将捕获无效的记忆访问问题,这可能是您崩溃的原因.阅读在这里
否则,在寡妇中,请尝试 >
编辑:由于使用SEH的方法似乎失败,因此您可以进行一个升级并使用矢量异常处理.根据http://blogs.msdn.com/b/kirush/archive/2008/04/24/global-crash-crash-crashhandler-for-c-papplication.aspx” rel=” rel=” rel =”rel =”rel =”rel =”rel =”rel = MSDN上的博客文章,VER已注册为每个程序,并在SEH之前进行检查.
如果所有失败,请不要绝望:)您仍然可以将应用程序变成一对调试器/Debugee.这将使您完全控制辩护过程的事件,生与死.这通常不值得麻烦,但这是我过去必须使用的其他解决方案.它也不像看起来那样困难.如果有其他事情失败,请告诉我,我会挖出一些旧代码.
以上所述是小编给大家介绍的从C ++调用Java:如何捕获/检测致命的JVM错误?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26092.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态