Как понять и решить EXCEPTION_ACCESS_VIOLATION в jni, используя javafxpackager и x86_64 windows exe? - PullRequest
0 голосов
/ 27 февраля 2019

Я разрабатываю установочный упаковщик для используемого Java-приложения. rhvoice синтезатор речи, которому не нужны привилегии администратора для Windows (поэтому я не могу использовать версию sapi).

Для ее решения яя использую andoid jni-код с формальными минимальными исправлениями и , все хорошо работает на обеих архитектурах x86 и x86_64 , когда приложение java выполняется с использованием java.exe из файлов jar.

Но, когда я делаю приложение для Windows EXE с помощью javafxpackager или, например, packr (они используют jvm.dll для работы), x86-версия работает хорошо, но x86_64 останавливается с java EXCEPTION_ACCESS_VIOLATION:

# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ff83fa36b2d, pid=110316, tid=0x0000000000019f60
#
# JRE version: OpenJDK Runtime Environment (8.0_201-b09) (build 1.8.0_201-1-ojdkbuild-b09)
# Java VM: OpenJDK 64-Bit Server VM (25.201-b09 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C  [RHVoice.64.dll+0x6b2d]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
...
Stack: [0x000000dd61600000,0x000000dd61ad0000],  sp=0x000000dd61acf030,  free space=4924k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [RHVoice.64.dll+0x6b2d]
C  0x000002990001962e

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  com.github.olga_yakovleva.rhvoice.TTSEngine.doGetVoices()[Lcom/github/olga_yakovleva/rhvoice/VoiceInfo;+0
j  com.github.olga_yakovleva.rhvoice.TTSEngine.getVoices()Ljava/util/List;+1
j  com.github.olga_yakovleva.rhvoice.Test.go()V+17
j  com.github.olga_yakovleva.rhvoice.Test.main([Ljava/lang/String;)V+34
v  ~StubRoutines::call_stub

Несколько лет назад, в 2014-2015 годах, этот метод работал без ошибок в Windows 7 и 8 на обеих архитектурах, но старая сборка не работает на Windows 10 и была перекомпилирована с использованием Visual Studio 2017.

Как я могу обнаружитьПричина такого исключения ошибки.Как я могу настроить среду отладки, чтобы исследовать это.

Когда я меняю версию java (oracle или неофициальные окна собирает openjdk), компилятор (vs2015 / 2017) или сборку операционной системы среды (win7 или win10), проблемаиногда приходил на упаковщик версии x86, а адрес исключения изменялся внутри библиотеки rhvoice или java.

...