2013-05-31 6 views
3

У меня возникают проблемы с отладкой приложения JNI. Я прочитал несколько потоков в StackOverflow, например this one, this one или this one. Я также попытался запустить gdb в отдельной оболочке и прикрепить ее к запущенному java-процессу. В обоих случаях проблема та же: GDB не может найти источники для отладки. Вещи пыталисьПрисоединение GDB к Eclipse для отладки кода JNI C++

  • «реж» линия Добавить в gdbinit, указывая на источники C++ папку
  • Добавление источников C++ папку в debbuging конфигурации GDB в Eclipse, во вкладке «Источники».
  • Добавление набор среды LD_LIBRARY_PATH =/путь/к/library.so, будучи library.so файла библиотеки, построенной из C++ исходные файлы
  • Attach ДДД к процессу Java, но я получаю сообщение об ошибке, потому что pthread_join.c является не найден в рабочем каталоге. У меня нет этого файла на моем жестком диске. Я не знаю, о чем это.

Ничего не работало. Я потратил несколько дней на это. Я знаю, что моя ошибка в коде C++, вызванном оболочкой JNI, но я не могу ее отладить. Любые намеки? Если это помогает, я запускаю Eclipse Juno в Debian 7 под Parallels VM на Mac OS.

Большое спасибо заранее,

ответ

2

Вы должны иметь информацию об отладке в вашей родной библиотеки. Вы должны передать -g своему компилятору и компоновщику, чтобы получить эту информацию в исполняемом файле. Вы также можете добавить -O0.

+0

Да, я скомпилировал его таким образом. Фактически, я могу отлаживать только библиотеку C++, используя GDB/DDD, напрямую вызываю методы, которые я хочу проверить. Проблема возникает, когда эта библиотека вызывается из обертки JNI. – jorgeas80

2

В качестве альтернативы присоединению к процессу Java вы можете создать приложение C++ и отладить его напрямую. Вам просто нужно связать функции, которые вы хотите проверить. В основной функции, create the VM, зарегистрируйте функции с помощью RegisterNatives и начните с тестового класса Java, который использует их.

Надеюсь, отладчик не имеет проблем с поиском источников, поскольку это всего лишь часть обычного цикла компиляции/ссылки/отладки приложения C++.

+0

Это звучит интересно. Большое спасибо. Но я хотел бы найти способ отладки текущего кода. Он довольно большой и сложный, и я боюсь, что если я потеряю контекст, я не смогу найти ошибку. – jorgeas80

+0

Это на самом деле хорошая идея. Вы не меняете свое приложение, вы используете только родной main() вместо основного Java. –

0

Я предлагаю начать с последних ADT bundle. Вы даже можете скачать the Mac version, поэтому вам даже не понадобится Parallels (см. Подробное описание instructions). Затем выберите Отладка Android Native Application в меню запуска.

+0

Спасибо за подсказку. Но я не развиваюсь на Android. Я работаю с приложением Java Desktop, которое использует C++-библиотеку через JNI для выполнения некоторых операций. Я хочу иметь возможность отлаживать как части Java, так и C++, используя Eclipse. – jorgeas80

+0

К сожалению, я пропустил эту крошечную деталь ;-) –

+0

Нет проблем. Спасибо за ваш ответ, так или иначе :-) – jorgeas80

Смежные вопросы