如何在Java中调试总线错误?

如何在Java中调试总线错误?,java,macos,lwjgl,libgdx,bus-error,Java,Macos,Lwjgl,Libgdx,Bus Error,我最近开始在一些代码中发现一个总线错误,我已经有一段时间没有运行了,我不知道发生了什么变化,但我希望能够确定原因。不幸的是,我习惯于在Eclipse调试器中调试错误,但在这种情况下,这没有帮助,因为程序只是终止 Java information: Exception type: Bus Error (0xa) at pc=164c38674 Java VM: Java HotSpot(TM) 64-Bit Server VM (20.10-b01-428 mixed mode macosx

我最近开始在一些代码中发现一个总线错误,我已经有一段时间没有运行了,我不知道发生了什么变化,但我希望能够确定原因。不幸的是,我习惯于在Eclipse调试器中调试错误,但在这种情况下,这没有帮助,因为程序只是终止

Java information:
 Exception type: Bus Error (0xa) at pc=164c38674

 Java VM: Java HotSpot(TM) 64-Bit Server VM (20.10-b01-428 mixed mode macosx-amd64)

Current thread (10d8bb800):  JavaThread "AWT-EventQueue-0" [_thread_in_native, id=547360768, stack(120901000,120a01000)]
Stack: [120901000,120a01000]
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  org.lwjgl.opengl.GL11.nglDrawArrays(IIIJ)V+0
J  com.badlogic.gdx.graphics.Mesh.render(Lcom/badlogic/gdx/graphics/glutils/ShaderProgram;III)V
j  org.viridia.fta.engine.particles.QuadSpriteBatchRenderer.flush()V+140
J  org.viridia.fta.engine.particles.QuadSpriteAppearance.draw(Lorg/viridia/fta/engine/particles/ParticleSystem;Lcom/badlogic/gdx/math/Matrix4;Lcom/badlogic/gdx/math/Matrix4;[Lorg/viridia/fta/engine/particles/Particle;II)V
j  org.viridia.fta.engine.particles.ParticleEmitter.render(Lorg/viridia/fta/engine/particles/ParticleSystem;Lcom/badlogic/gdx/math/Matrix4;Lcom/badlogic/gdx/math/Matrix4;)V+16
j  org.viridia.fta.engine.particles.ParticleSystem.render(Lcom/badlogic/gdx/math/Matrix4;Lcom/badlogic/gdx/math/Matrix4;)V+29
j  org.viridia.tiles.ui.TileMapEditor.render()V+474
j  com.badlogic.gdx.backends.lwjgl.LwjglAWTCanvas.render()V+190
j  com.badlogic.gdx.backends.lwjgl.LwjglAWTCanvas$1.paintGL()V+4
j  org.lwjgl.opengl.AWTGLCanvas.paint(Ljava/awt/Graphics;)V+172
j  org.lwjgl.opengl.AWTGLCanvas.update(Ljava/awt/Graphics;)V+2
j  sun.awt.RepaintArea.updateComponent(Ljava/awt/Component;Ljava/awt/Graphics;)V+6
j  sun.awt.RepaintArea.paint(Ljava/lang/Object;Z)V+305
等等

最近确实发生了变化的一件事是OSX软件更新服务最近更新了默认的JVM。然而,这可能不是原因——我在Eclipse中尝试在不同的JVM下运行,但遇到了相同的问题

从堆栈转储中可以看到,我使用的是轻量级Java游戏库,它是通过libgdx调用的。据我所知,我自己的代码在这里没有做任何特别的事情,而且大约一个月前我最后一次尝试它时,它工作得很好:

  public void flush() {
    if (vertexCount > 0 && shader != null) {
      mesh.setVertices(vertices, 0, vertexCount);
      shader.begin();
      Gdx.gl20.glEnable(GL20.GL_BLEND);
      Gdx.gl20.glDepthMask(false);
      Gdx.gl20.glEnable(GL20.GL_DEPTH_TEST);
      if (texture != null && hasTexture) {
        texture.bind(0);
        shader.setUniformi("uTexture0", 0);
      }
      shader.setUniformMatrix("uViewXForm", view);
      shader.setUniformMatrix("uProjXForm", proj);
      mesh.render(shader, GL20.GL_TRIANGLES, 0, vertexCount);
      shader.end();
      Gdx.gl20.glDepthMask(true);
    }
    vertexCount = 0;
  }

听起来像是Java运行时中的一个bug。。。尝试确定导致问题发生的代码的单行。。。这可能会导致一个您可以归档的解决方法/错误。总线驱动程序无法调试?我猜这是OpenGL库中本机代码的崩溃。您是否检查了com.badlogic.gdx.graphics.Mesh.render的实现,以确保它传递了有效的参数?看起来LWJGL相当轻量级,几乎可以将参数传递给OpenGL,但我不是这方面的专家。要检查的另一件事是,您正在使用LWJGL的最新版本。OpenGL库是否有日志输出??我认为是这样。。将它发布给我们..我确切地知道在我的代码中崩溃发生的位置-它是在对Mesh.render的调用中-它曾经工作过,直到发生了变化。我需要知道的是如何确定崩溃发生在底层库的何处。我真正需要的是一个调试器,它可以捕获总线错误并让我查看堆栈。