2010-08-17 19 views
6

Actualmente estoy escribiendo un proyecto JNI donde obtengo el siguiente registro de errores cuando intento ejecutar mi código Java. Me dice que el marco problemático es uno de jvm.dll, y al tratar de aislar el problema, estoy tratando de averiguar dónde está exactamente mi problema (en la JVM frente a mi código nativo) He adjuntado el hilo sección del registro, y puede agregar el resto si es necesario. También intenté reinstalar la JVM.¿Violación de acceso de excepción Java?

Un error fatal ha sido detectado por el Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) en pc = 0x6d8fefb5, pid = 720, tid version = 3,128

JRE: 6.0_21 -b07 Java VM: Java HotSpot (TM) Client VM (17.0-b17 modo mixto, compartiendo ventanas-x86) marco Problemática: V [jvm.dll + 0xfefb5]

--------------- HILO ---------------

hilo actual (0x02189000): "principal" [_thread_in_vm JavaThread , id = 3128, pila (0x02120000,0x02170000)]

SIGINFO: ExceptionCode = 0xc0000005, lectura de dirección 0x00000000

: Registros: EAX = 0x00000000, EBX = 0x02189118, ECX = 0x02189000, EDX = 0x6da2f76c ESP = 0x0216fa84, EBP = 0x0216facc, ESI = 0x02189000, EDI = 0x00000000 EIP = 0x6d8fef b5, EFLAGS = 0x00010246

superior de la pila: (sp = 0x0216fa84) 0x0216fa84: 0216fb38 0216fae4 34497370 0216faa0 0x0216fa94:
6d8010e0 02189000 0216fd34 0216fad0 0x0216faa4: 6d906d09 02189000 00000006 00000004 0x0216fab4:
0216fb38 0216fae8 02189000 02189a08 0x0216fac4: 000004c4 6da2f76c 0216faf0 57669c1a 0x0216fad4:
02189118 00000000 0216fbf0 0216fb04 0x0216fae4: 0216fb04 cccccccc 0216fb04 0216fb38 0x0216faf4:
576699d3 02189118 0216fbf0 00000000

Instrucciones: (pc = 0x6d8fefb5) 0x6d8fefa5: 00 00 00 74 08 8d f0 4d e8 1e 20 09 00 8b 7d 10 0x6d8fefb5:
8b 07 c7 45 e0 0c 00 00 00 8b 48 08 0f b7 51 2a

Stack: [0x02120000,0x02170000], sp = 0x0216fa84, libre espacio = 13e0216f568k marcos nativos: (J = código compilado, j = interpretado, código Vv = VM Java , C = código nativo) V [jvm.dll + 0xfefb5] C [PNMain.dll + 0x19c1a] C [PNMain.dll + 0x199d3] j PNMain.optimalSideTwist2 (ILjava/lang/cadena; Lvtk/vtkPolyDataAlgorithm; DDDDDD) [D + 0 j PNMain.rotateLeftRight (Z) [D + 282 j PNMain.main ([Ljava/lang/String;) V + 92 v ~ StubRoutines :: call_stub V [jvm.DLL + 0xf3abc] V [jvm.dll + 0x1865b1] V [jvm.dll + 0xf3b3d] V [jvm.dll + 0xfd385] V [jvm.dll + 0x104fdd] C [javaw.exe + 0x2155] C [javaw.exe + 0x8614] C [kernel32.dll + 0x13677] C [ntdll.dll + 0x39d42] C [ntdll.dll + 0x39d15]

Java marcos: (J = compilado código Java, j = interpretado, código Vv = VM) j PNMain.optimalSideTwist2 (ILjava/lang/cadena; Lvtk/vtkPolyDataAlgorithm; DDDDDD) [D + 0 j PNMain.rotateLeftRight (Z) [D + 282 j PNMain.main ([Ljava/lang/String;) V + 92 v ~ StubRoutines :: call_stub

Respuesta

3

Para facilitar su depuración, podemos descartar que la JVM tenga un problema (en 99.99% de los casos no es el problema), busque en su código. Comience simplemente apagando su llamada JNI y viendo si la mecánica está bien hecha. Luego, comience a agregar fragmentos de código lentamente, después de haber inspeccionado cuidadosamente todas las asignaciones de memoria y desasignaciones. Podría usar un depurador para acceder a su código y seguir ese camino también.

Tal vez podría reducir su DLL a la pieza más pequeña de código que produce el problema y publicar el código aquí para que otros lo ejecuten y lo miren si está atascado.

El método que causó el bloqueo es óptimoSideTwist2 si eso ayuda. Ese puede no ser el método que causó el problema. Si está alojando la memoria entre diferentes métodos, es posible que esté liberando memoria que no es suya, o puede sobrescribir la memoria.

Cuestiones relacionadas