异常访问违规Java?

spa*_*der 6 java crash java-native-interface jvm crash-dumps

我正在编写一个JNI项目,我在尝试运行Java代码时遇到以下错误日志.它告诉我有问题的框架是一个jvm.dll,并试图隔离问题,我试图找出我的问题究竟在哪里(在JVM与我的本机代码)我附加了线程日志部分,如果需要可以附加其余部分.我也尝试重新安装JVM.

Java运行时环境检测到致命错误:

pc = 0x6d8fefb5的EXCEPTION_ACCESS_VIOLATION(0xc0000005),pid = 720,tid = 3128

JRE版本:6.0_21-b07 Java VM:Java HotSpot(TM)客户端VM(17.0-b17混合模式,共享windows-x86)有问题的框架:V [jvm.dll + 0xfefb5]

---------------线程---------------

当前线程(0x02189000):JavaThread"main"[_thread_in_vm,id = 3128,stack(0x02120000,0x02170000)]

siginfo:ExceptionCode = 0xc0000005,读取地址0x00000000

寄存器:EAX = 0x00000000,EBX = 0x02189118,ECX = 0x02189000,EDX = 0x6da2f76c ESP = 0x0216fa84,EBP = 0x0216facc,ESI = 0x02189000,EDI = 0x00000000 EIP = 0x6d8fefb5,EFLAGS = 0x00010246

栈顶的:(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 0216fbf0 00000000 0216fb04 0x0216fae4:0216fb04 CCCCCCCC 0216fb04 0216fb38 0x0216faf4:
576699d3 02189118 0216fbf0 00000000

说明:(pc = 0x6d8fefb5)0x6d8fefa5:00 00 00 74 08 8d 4d f0 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

堆栈:[0x02120000,0x02170000],sp = 0x0216fa84,可用空间= 13e0216f568k本机帧:(J =已编译的Java代码,j =已解释,Vv = VM代码,C =本机代码)V [jvm.dll + 0xfefb5] C [ PNMain.dll + 0x19c1a] C [PNMain.dll + 0x199d3] j PNMain.optimalSideTwist2(ILjava/lang/String; 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框架:(J =编译的Java代码,j =解释,Vv = VM代码)j PNMain.optimalSideTwist2(ILjava/lang/String; Lvtk/vtkPolyDataAlgorithm; DDDDDD)[D + 0 j PNMain.rotateLeftRight(Z)[D + 282 j PNMain.main([Ljava/lang/String;)V + 92 v~StubRoutines :: call_stub

Rom*_*eau 3

为了使您的调试更容易,我们可以排除 JVM 有问题(在 99.99% 的情况下这不是问题),请查看您的代码。首先简单地删除 JNI 调用并查看机制是否正确完成。然后,在仔细检查所有内存分配和释放后,开始慢慢添加代码片段。您可以使用调试器来访问您的代码,也可以这样做。

也许您可以将 DLL 缩减为产生问题的最小代码段,然后将代码发布到此处,以便其他人运行它并在您遇到困难时查看它?

如果有帮助的话,导致崩溃的方法是optimalSideTwist2。这可能不是导致问题的方法。如果您在不同的方法之间分配内存,您可能会释放不属于您的内存,或者可能会覆盖内存。