У меня есть приложение для Android, которое состоит из APK на основе Java, нативный исполняемый файл и нативная библиотека. АПК общается с собственным исполняемым файлом (root NDK c / c ++) и библиотекой через сокет.
Я не уверен, имеет ли это значение, но исполняемый файл и библиотека компилируются через cmake, копируются в исполняемый файл и затем запускаются от имени пользователя root. Мне нужно, чтобы какой-то тип отладки работал с точками останова и тому подобным, независимо от того, идет ли это непосредственно в Android Studio или через командную строку.
Вам нужно будет запустить gdbserver на устройстве и позволить ему подключиться к вашему исполняемому файлу.
Gdbserver поставляется с NDK, как правило, под <ndk>/prebuilt/android-arm/gdbserver/
Скопируйте двоичный файл gdbserver на ваше устройство, например, в /data/local/tmp
и дать ему исполняемые разрешения с chmod
Если ваш исполняемый файл уже запущен, найдите его PID
с ps
введите команду и присоедините к ней gdb:
gdbserver :5039 --attach <PID>
Обратите внимание, что 5039 — это номер порта, который обычно используется для отладки с помощью gdb, вы можете использовать свой собственный, если хотите
настроить переадресацию портов с устройства на компьютер с
adb forward tcp:5039 tcp:5039
Запустите GDB локально, обратите внимание, что вам нужен целевой GDB, который также поставляется с ndk, обычно в
<ndk>toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gdb
Присоедините GDB к вашему процессу
target remote :5039
И отсюда вам нужно использовать команды GDB, которые соответствуют вашим ожиданиям отладки (установить точки останова, символы загрузки, пошаговое выполнение и т. Д.), Для примеров использования шпаргалка или спросите в комментариях
Других решений пока нет …