Хотя можно разрабатывать автономные приложения, которые можно запускать непосредственно из оболочки, как описывают другие, похоже, ваш код работает в среде приложений Android. Следовательно, у вас нет исполняемого файла, вместо этого у вас есть APK, который содержит ваши файлы классов Dalvik вместе с другими ресурсами, включая ваш собственный общий объект.
Запуск приложения в APK включает несколько шагов
- Процесс system_server получает намерение запросить ваше приложение.
- Процесс zygote велит отключить новый процесс и запустить метод вашего класса.
- Ваше приложение запускается в новом процессе.
Хотя вы не можете запустить 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 <pid>
, как и раньше. Если вам повезло, ваше приложение ждет некоторого взаимодействия с пользователем, прежде чем вызывать ваш нативный код, чтобы дать вам возможность присоединить и установить точки останова в GDB.