异常访问违例Java? [英] Exception Access Violation Java?

查看:373
本文介绍了异常访问违例Java?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在写一个JNI项目,当我尝试运行我的Java代码时,我得到以下错误日志。它告诉我,有问题的框架是一个jvm.dll,在试图孤立的问题,我试图找出究竟我的问题是什么(在JVM vs.我的本机代码)我已附加线程部分,并且如果需要可以追加其余部分。我也尝试重新安装JVM。



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



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



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



--------------- THREAD -------------- -



当前线程(0x02189000):
JavaThreadmain[_thread_in_vm,
id = 3128,stack(0x02120000,0x02170000) p>

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,free
space = 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 )[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 = interpret,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



解决方案

JVM有一个问题(在99.99%的情况下它不是问题),看看你的代码。首先简单地扼死你的JNI调用,看看是否正确完成了这些技巧。然后,在仔细检查了所有内存分配和释放后,开始慢慢添加代码段。你可以使用调试器来访问你的代码,也可以这样做。



也许你可以将你的DLL减少到产生问题的最小的代码,并将代码放在其他人运行它,看看它,如果你陷入困境?



导致崩溃的方法是optimalSideTwist2,如果有帮助。这可能不是导致问题的方法。如果你在不同的方法之间定位内存,你可能是释放不是你的内存,或者你可能会覆盖内存。


I'm currently writing a JNI project where I'm getting the following error log when trying to run my Java code. It tells me that the problematic frame is a jvm.dll one, and in trying to isolate the problem, I'm trying to work out where exactly my problem is (in the JVM vs. my native code) I've attached the thread section of the log, and can append the rest if needed. I also tried reinstalling the JVM.

A fatal error has been detected by the Java Runtime Environment:

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

JRE version: 6.0_21-b07 Java VM: Java HotSpot(TM) Client VM (17.0-b17 mixed mode, sharing windows-x86 ) Problematic frame: V [jvm.dll+0xfefb5]

--------------- T H R E A D ---------------

Current thread (0x02189000): JavaThread "main" [_thread_in_vm, id=3128, stack(0x02120000,0x02170000)]

siginfo: ExceptionCode=0xc0000005, reading address 0x00000000

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

Top of Stack: (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

Instructions: (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

Stack: [0x02120000,0x02170000], sp=0x0216fa84, free space=13e0216f568k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) 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 frames: (J=compiled Java code, j=interpreted, Vv=VM code) 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

解决方案

To make your debugging easier we can rule out that the JVM has a problem (in 99.99 % of cases it is not the problem), Look in your code. Start by simply stubbing out your JNI call and seeing if the mechanics are properly done. Then start adding pieces of code slowly, after you have inspected all memory allocations and deallocations carefully. You could use a debugger to access your code and go that way also.

Maybe you could reduce your DLL to the smallest piece of code that produces the problem and post the code here for others to run it and look at it if you are stuck ?

The method that caused the crash is optimalSideTwist2 if that helps. That may not be the method that caused the problem. If you are alocating memory between different methods you might be freeing memory that is not yours, or you may be overwriting memory.

这篇关于异常访问违例Java?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆