【问题标题】:Java Runtime Environment getting "fatal error SIGSEGV" for program using JOGLJava 运行时环境为使用 JOGL 的程序获取“致命错误 SIGSEGV”
【发布时间】:2010-11-09 15:16:42
【问题描述】:

我正在尝试通过 Eclipse 运行 Java 程序。每当我尝试运行它时,我都会得到以下结果:

Info: XInitThreads() called for concurrent Thread support
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x000010f1, pid=2750, tid=1923033968
#
# JRE version: 6.0_22-b04
# Java VM: Java HotSpot(TM) Server VM (17.1-b03 mixed mode linux-x86 )
# Problematic frame:
# C  0x000010f1
#
# An error report file with more information is saved as:
# /home/anjruu/ragamuffin/trunk/pipeline/hs_err_pid2750.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp

我没有收到任何构建错误,并且已经使用 Java 6 OpenJDK 以及 Sun 的 jdk1.6.0_22 进行了尝试,两者的行为相同。我正在运行 Ubuntu 10.10 系统。该程序使用JOGL(Java OpenGL),有关系吗?

日志文件大约有 400 行长,所以我认为发布整个内容可能不是那么有用,而且我不确定会是哪些部分,但如果有人可以让我知道我应该包含哪些内容,我可以这样做。

【问题讨论】:

    标签: java jogl segmentation-fault jvm-crash


    【解决方案1】:

    这看起来像是某处某些 C 代码中的错误。鉴于它发生在两个不同的 JVM 上,我倾向于怀疑本机扩展,也许是 JOGL。

    您是否也检查了报告指向的文件:hs_err_pid2750.log?查看这些内容然后搜索其中一些内容通常可以将您指向其他有相同问题的人,有时甚至可以解决问题。

    【讨论】:

    • 我看过日志,但遗憾的是它是一堆十六进制和堆栈跟踪,我知道杰克。
    • 您通常可以只搜索最具体的一个并获得成功,即使它对您没有意义。
    【解决方案2】:

    如果您在 Linux 系统上使用 JOGL,那么几乎可以肯定问题出在此处。 3D 图形在大多数 Linux 系统上不是很健壮,JOGL 非常强调 3D 图形系统,因为它对它们做了一些不寻常的事情,主要与多线程有关。

    大多数情况下,问题出在过时或不合格的显示驱动程序上。确保您的系统具有最新的驱动程序,并使用专有驱动程序,而不是安装附带的驱动程序,而不是任何开源驱动程序 - 对不起,但这是真正了解硬件的一种情况(就像显卡提供商所做的那样)提高质量和性能。这通常会解决问题。

    如果这对您没有帮助,您将不得不做一些激烈的事情。通常禁用硬件图形加速会修复它,但当然会损失性能。日志文件应该为您提供完整的堆栈跟踪,如果您熟悉设备驱动程序编码并拥有驱动程序的源代码,这可能会很有用。或者尝试使用不同的显卡——如果你最近没有升级你的显卡,新显卡很便宜。

    在一般情况下,我花了几个月的时间试图在 Linux 上运行的 JOGL 应用程序上追踪此类错误,但我仍然发现安装时窗口会显示为空白。祝你好运。

    【讨论】:

    • 哇,这确实令人鼓舞!原谅我的无知,但是在虚拟 Windows 机器上运行程序会有帮助吗?我有运行 Windows XP 的 Oracle VirtualBox,但由于虚拟机需要调用底层硬件,会出现同样的问题吗?
    • VMWare 不支持 OpenGL,所以它根本没有帮助。我对 VirtualBox 一无所知,但我怀疑它会有所帮助。随时证明我错了。
    • 好吧,我试了一下,在 VirtualBox 中通过 Windows XP 映像运行它确实有效。也许问题在于我如何设置我的 JOGL 系统,在这种情况下,我不知道。
    【解决方案3】:

    正如其他海报所说,JOGL 程序中的 HotSpot 错误通常可以通过将显卡驱动程序更新到最新版本来修复。

    但是,如果您使用的是新的 JOGL 2.0 测试版,问题可能是您没有调用 GLProfile.initSingleton(),或者您没有足够早地调用它(它必须在任何 X 之前Windows 调用)。

    我在http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ 有一个教程,它展示了如何创建一个简单的 JOGL 2.0 程序。我已经在 CentOS 5.4 上测试过这个程序,它可以正常工作。回到在本教程的正确位置使用 GLProfile.initSingleton() 之前,我看到了与您相同的 SIGSEGV 错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      相关资源
      最近更新 更多