J'essaie de corriger ce qui semble être une condition de concurrence dans un code en utilisant libGDX. Cette situation de concurrence particulière bloque la JVM lorsqu'elle se produit.Obtention de numéros de ligne à partir d'une trace de pile dans un journal de plantage JVM
Recherche dans le journal de plantage machine virtuelle Java, je trouve les lignes suivantes:
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J 1128 com.badlogic.gdx.utils.BufferUtils.copyJni([FLjava/nio/Buffer;II)V (0 bytes) @ 0x0000000002d477b0 [0x0000000002d47740+0x70]
J 1365 C2 com.badlogic.gdx.graphics.g2d.SpriteBatch.flush()V (185 bytes) @ 0x0000000002e16ad4 [0x0000000002e16940+0x194]
J 1201 C1 com.badlogic.gdx.graphics.g2d.SpriteBatch.end()V (90 bytes) @ 0x0000000002d8f2d4 [0x0000000002d8f1c0+0x114]
J 1422 C1 com.me.mygame.screens.IslandScreen.render(F)V (848 bytes) @ 0x0000000002e40624 [0x0000000002e3a4e0+0x6144]
J 1539 C1 com.badlogic.gdx.Game.render()V (25 bytes) @ 0x0000000002e6c1dc [0x0000000002e6c000+0x1dc]
j com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop()V+698
j com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run()V+27
v ~StubRoutines::call_stub
Une ligne particulière implique une partie de mon propre code:
J 1422 C1 com.me.mygame.screens.IslandScreen.render(F)V (848 bytes) @ 0x0000000002e40624 [0x0000000002e3a4e0+0x6144]
Est-il possible que je peux trouver ce que le ligne spécifique qui provoque c'est? Si non, que peut-on faire pour déboguer ce crash?
Assurez-vous que vous n'instanciez, purgez ou ne purgez rien de la méthode de rendu. – Hllink
Étant donné que cette méthode a la signature "void render (float)", recherchez cette méthode dans cette classe. Vous pouvez ensuite rechercher l'appel "void end()" pour trouver la ligne spécifique dans la méthode de rendu qui effectue l'appel. –
Quelle est la complexité de votre méthode render()? Peut-être poster pourrait-il avoir de nouveaux yeux et peut-être signaler quelque chose que vous faites incorrectement? –