У меня есть приложение для Android, которое обрабатывает звук в реальном времени. Поскольку эта задача критична по времени, я написал код, выполняющий обработку, на C++, остальная часть приложения - это Java. Android Studio поддерживает отладку JNI без каких-либо вопросов, что облегчило мне написание кода. Затем я оставил код в покое и тем временем решил избавиться от Android Studio и вместо этого использовать IntelliJ.
Теперь у меня возникла проблема с машинным кодом, и я хотел отладить код C++, когда я внезапно понял, что не могу устанавливать точки останова в коде C++.
Я также попытался установить точку останова в java-коде непосредственно перед собственным вызовом и надеялся, что, нажав «Step in», он войдет в собственный код, но вместо этого InteliJ просто пропустил его.
Кроме того, конфигурация запуска с включенной двойной отладкой (которую я тогда создал в Android Studio), похоже, не работает (Android Studio использовала для загрузки тонны библиотек при запуске собственного отладчика, IntelliJ этого не делает).
Мне это кажется странным, поскольку, согласно официальному сообщению в блоге JetBrain, IntelliJ имеет все функции Android Studio, кроме мастера настройки проекта. Что мне здесь не хватает?
Кстати, я знаю о этот вопрос, но его ответы устарели.
Нет, я использую цель gradle externalNativeBuild
И я редактировал файлы с помощью Android Studio, поскольку Android Studio также поддерживает редактирование C++.
Итак, один из способов отладки вашей DLL (если вы работаете в Windows) - это создать DLL в режиме отладки и присоединить отладчик Visual Studio к вашему процессу Java. Но без сборки VS это решение неприменимо.
Насколько я понял процесс сборки jni, gradle вызывает clang, который, в свою очередь, компилирует C++ в libSomething.so.
Но в любом случае, как вы предлагаете компилировать / отлаживать код JNI в VS?
Что ж, если у вас уже есть сборка VS, которая создает вашу DLL, VS может быть присоединен к процессу (вам нужен PID запущенного процесса), точки останова могут быть вставлены из VS. См. msdn.microsoft.com/en-us/library/3s68z0b3.aspx
Я использовал это некоторое время назад для отладки Quantlib (C++) при вызове через JNI, VS весьма удобен
Но я вижу, что Android Studio использует lldb.llvm.org, возможно, вы можете найти справку о том, как использовать этот другой отладчик
Я понимаю, к чему вы клоните, но не думаю, что это возможно. Я говорю о приложении для Android, которое работает на моем телефоне Android, а не на моем компьютере. Я могу отлаживать java-код через USB и в Android Studio, раньше я мог делать то же самое с C++. Но поскольку он не запущен на моей машине, нет Java-процесса, к которому VS могла бы присоединиться.
Что ж, если вам нужно отладить взаимодействие приложения Android и библиотеки C++ во время работы на вашем телефоне, тогда перенос всего обратно в Android Studio кажется единственным выбором (и AS очень эффективен в этом отношении). Более легкий подход к отладке заключался бы в использовании той же библиотеки C++ в другом приложении Java (если вы можете передать библиотеке те же данные, и вы можете игнорировать фактическое взаимодействие с телефоном). В любом случае .. удачи :)
Я хотел избежать одновременной установки Android Studio и IntelliJ, поскольку они по сути являются одним и тем же программным обеспечением. Но, поскольку лучшего решения, похоже, нет, думаю, мне придется вернуться к AS. Итак, «Android Studio и IntelliJ эквивалентны, за исключением мастера настройки проекта»: /
Если вы не возражаете перефразировать свои комментарии как ответ @Daniele, я бы отметил это как решение, так как это может решить проблему для некоторых людей.




Как вы строите библиотеку C++? Вы используете Visual Studio?