Я пытаюсь отладить код, написанный на Java / JNI / C ++. Я думаю, что должна быть какая-то несовместимость библиотек, но я не смог понять, что именно. Проходя через C ++ (в gdb), я получаю следующую ошибку сегмента:
Кажется, что это вызвано одним из Javaпотоки, кроме той, что вызывает C ++. К сожалению, я не смог точно определить это. Есть ли известная несовместимость или ошибка кодирования, которая вызывает это? Если ничего другого, какие-либо предложения по поиску ошибки?
Раньше у меня были отладчик eclipse и gdb, подключенные одновременно, так что я мог пройтись по соответствующим фрагментам кода. К сожалению, иногда это кажется нестабильным. В конце концов я бы продолжил работу с GDB, но похоже, что контроль никогда не возвращался в Java. Таким образом, он зависал до тех пор, пока я не уничтожил дерево процессов.
Редактировать: Если я присоединю оба отладчика и просто дам команде gdb команду continue, я могу пройти через Java к этому моменту:
где:
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 я вижу много предупреждений, подобных этому:
Однако,когда возникает ошибка сегмента, я не получаю одно из этих предупреждений. Во всех всплывающих предупреждениях я вижу только пару ссылок на код моего приложения, и они связаны с небольшим фрагментом графического интерфейса, который не должен влиять на сбои, которые я вижу при тестировании.