Ошибка сегментации OpenJDK на странице write_memory_serialize_page - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь отладить код, написанный на Java / JNI / C ++. Я думаю, что должна быть какая-то несовместимость библиотек, но я не смог понять, что именно. Проходя через C ++ (в gdb), я получаю следующую ошибку сегмента:

enter image description here

Кажется, что это вызвано одним из Javaпотоки, кроме той, что вызывает C ++. К сожалению, я не смог точно определить это. Есть ли известная несовместимость или ошибка кодирования, которая вызывает это? Если ничего другого, какие-либо предложения по поиску ошибки?

Раньше у меня были отладчик eclipse и gdb, подключенные одновременно, так что я мог пройтись по соответствующим фрагментам кода. К сожалению, иногда это кажется нестабильным. В конце концов я бы продолжил работу с GDB, но похоже, что контроль никогда не возвращался в Java. Таким образом, он зависал до тех пор, пока я не уничтожил дерево процессов.

Редактировать: Если я присоединю оба отладчика и просто дам команде gdb команду continue, я могу пройти через Java к этому моменту:

enter image description here

где:

lusCodebase = файл: ./ jini / jsk-dl.jar файл: ./ jini / reggie-dl. jar-файл: ./ jini / jsk-dl.jar

lusPolicy указывает на файл с содержимым: предоставить {разрешение java.security.AllPermission "", "";};

lustClasspath =jini / reggie.jar: jini / jini-ext.jar: jini / jsk-lib.jar: jini / jsk-platform.jar

После перехода по строке 130 ошибка сегмента появляется в GDB, ссообщение «переключение на поток».

С добавлением -Xcheck: jni я вижу много предупреждений, подобных этому:

enter image description here

Однако,когда возникает ошибка сегмента, я не получаю одно из этих предупреждений. Во всех всплывающих предупреждениях я вижу только пару ссылок на код моего приложения, и они связаны с небольшим фрагментом графического интерфейса, который не должен влиять на сбои, которые я вижу при тестировании.

...