快速回答当然是“不哭”。)。
在Win7 32位系统上,我的Java应用程序(J2SE 1.7)存在一个非常奇怪的问题。我遇到了所有的情况:
hs_err_pidxxxx.log
文件,我可以分析发生了什么。hs_err
文件,但是我有一个弹出式java停止运行,我可以在Windows事件日志中看到异常,甚至可以用视觉调试过程的某些部分。System.exit()
或本地exit()
来电,它就会结束。所以我的问题是:
答案 0 :(得分:1)
我怎么能确定这是一个原生退出电话,因为我没有全部 我正在使用的本机库代码?
我知道确定的唯一方法是使用日志记录命令将调用包装到本机库,以便在每次调用之前和每次返回之后进行记录。如果日志有输入消息但没有返回消息,程序崩溃后,该库调用是可疑的。
是否有可能让另一个人产生这种奇怪的行为 是什么意思?
是的,还有无数奇怪的其他手段。 使用内存或其他资源可能只是一种解释。
最后如何调试和跟踪哪个lib可能是根本原因?
如果消息特定于调用哪个库,则上述记录也应该找到。您可以在jconsole中监视应用程序,看它是否耗尽了大量的内存或线程。禁用任何可以禁用的内容,以便将其作为问题的一部分予以消除。如果问题消失,则在问题返回之前一次启用一个问题。
答案 1 :(得分:1)
我怎么能确定这是一个原生退出调用,因为我没有我正在使用的本机库的所有代码?
调试它。
是否有可能让这种奇怪的行为产生另一种意思?
很难说......可能是线程,可能是内存泄漏,......
最后如何调试和跟踪哪个lib可能是根本原因?
使用
运行Java-XX:+CreateMinidumpOnCrash
你会得到一个可以分析的崩溃转储。或者使用
-XX:+UseOSErrorReporting
让Windows处理崩溃(例如,根据您安装的内容,将显示附加调试器的消息。它可能会显示“发送给Microsoft”错误报告。)。