Нарушение доступа исключений Java? - PullRequest
6 голосов
/ 17 августа 2010

В настоящее время я пишу проект JNI, в котором я получаю следующий журнал ошибок при попытке запустить мой Java-код.Он говорит мне, что проблемный фрейм - jvm.dll, и, пытаясь изолировать проблему, я пытаюсь понять, где именно моя проблема (в JVM против моего нативного кода), я прикрепил потокраздел журнала, а остальные можно добавлять при необходимости.Я также попытался переустановить JVM.

В среде выполнения Java обнаружена фатальная ошибка:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) при pc = 0x6d8fefb5, pid = 720, tid = 3128

JRE версия: 6.0_21-b07 Java VM: Java HotSpot (TM) Клиентская виртуальная машина (смешанный режим 17.0-b17, совместное использование windows-x86) Проблемный кадр: V [jvm.dll + 0xfefb5]

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

Текущий поток (0x02189000): JavaThread "main" [_thread_in_vm, id = 3128, стек (0x02120000,0x02170000)]

siginfo: ExceptionCode = 0xc0000005, адрес чтения 0x00000000

Регистры: EAX = 0x00000000, EBX = 0x02189118 EC = 0x21890 = 0, EC0 = 0x0 089 = 00x6da2f76c ESP = 0x0216fa84, EBP = 0x0216facc, ESI = 0x02189000, EDI = 0x00000000 EIP = 0x6d8fefb5, EFLAGS = 0x00010246

верхняя часть стека: sp = 0x02160fa08484: 0680166fa08484: 0: 0x0216fa: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

Инструкции: (рс = 0x6d8fefb5) 0x6d8fefa5: 0000 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 ([язык / язык];) 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

1 Ответ

3 голосов
/ 17 августа 2010

Чтобы упростить отладку, мы можем исключить, что у JVM есть проблема (в 99,99% случаев это не проблема), посмотрите в своем коде.Начните с того, что просто заглушите вызов JNI и посмотрите, правильно ли работает механика.Затем начните медленно добавлять фрагменты кода, после того как вы тщательно проверили все выделения памяти и освобождения.Вы можете использовать отладчик для доступа к своему коду и идти по этому пути.

Может быть, вы могли бы уменьшить свою DLL до наименьшего куска кода, который создает проблему, и опубликовать код здесь, чтобы другие могли его запустить и посмотреть, застряли ли вы?

Метод, который вызвал сбой, - оптимальныйSideTwist2, если это помогает.Возможно, это не тот метод, который вызвал проблему.Если вы распределяете память между различными способами, возможно, вы освобождаете память, которая не принадлежит вам, или вы перезаписываете память.

...