Я пытаюсь отладить совместно использованную библиотеку собственного компонента, которой мое Приложение пользуется через JNI. Я могу присоединить к запущенному приложению очень хорошо с "gdbserver - присоединяют pid", но я должен на самом деле запустить свое приложение, когда я запускаю команду gdbserver.
Существует миллион хитов блога по этой теме, но ни один из них, кажется, не ясен относительно того, как Вы запускаете свое приложение. Они все говорят, чтобы просто ввести "gdbserver 10.0.2.2:1234./MyProgram", но что точно является "MyProgram". Это - MyProgram.apk? Это - MyProgram.so? Это - некоторый другой файл, который создается, когда приложение установлено? Если так, каков его путь?
Хотя можно разрабатывать автономные приложения, которые можно запускать непосредственно из оболочки, как описывают другие, похоже, что ваш код работает в приложении Android. фреймворк. Следовательно, у вас нет исполняемого файла, а вместо этого есть APK, который содержит ваши файлы классов Dalvik вместе с другими ресурсами, включая ваш собственный общий объект.
Запуск приложения в APK включает несколько шагов
Хотя вы не можете запустить APK напрямую, передав исполняемый файл в gdbserver, довольно легко запустить его из оболочки с помощью команды am
.
$ adb -d shell
# am
usage: am [subcommand] [options]
start an Activity: am start [-D] <INTENT>
-D: enable debugging
send a broadcast Intent: am broadcast <INTENT>
start an Instrumentation: am instrument [flags] <COMPONENT>
-r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
-e <NAME> <VALUE>: set argument <NAME> to <VALUE>
-p <FILE>: write profiling data to <FILE>
-w: wait for instrumentation to finish before returning
start profiling: am profile <PROCESS> start <FILE>
stop profiling: am profile <PROCESS> stop
<INTENT> specifications include these flags:
[-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]
[-c <CATEGORY> [-c <CATEGORY>] ...]
[-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
[--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
[-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
[-n <COMPONENT>] [-f <FLAGS>] [<URI>]
# am start -n com.android.browser/.BrowserActivity
Starting: Intent { cmp=com.android.browser/.BrowserActivity }
#
После запуска приложения используйте gdbserver --attach
, как и раньше. Если вам повезет, ваше приложение ожидает некоторого взаимодействия с пользователем перед вызовом вашего собственного кода, чтобы дать вам возможность прикрепить и установить точки останова в GDB.