Как отладить Приложение на Android с GDBSERVER?

Я пытаюсь отладить совместно использованную библиотеку собственного компонента, которой мое Приложение пользуется через JNI. Я могу присоединить к запущенному приложению очень хорошо с "gdbserver - присоединяют pid", но я должен на самом деле запустить свое приложение, когда я запускаю команду gdbserver.

Существует миллион хитов блога по этой теме, но ни один из них, кажется, не ясен относительно того, как Вы запускаете свое приложение. Они все говорят, чтобы просто ввести "gdbserver 10.0.2.2:1234./MyProgram", но что точно является "MyProgram". Это - MyProgram.apk? Это - MyProgram.so? Это - некоторый другой файл, который создается, когда приложение установлено? Если так, каков его путь?

8
задан cjserio 13 January 2010 в 12:57
поделиться

1 ответ

Хотя можно разрабатывать автономные приложения, которые можно запускать непосредственно из оболочки, как описывают другие, похоже, что ваш код работает в приложении Android. фреймворк. Следовательно, у вас нет исполняемого файла, а вместо этого есть APK, который содержит ваши файлы классов Dalvik вместе с другими ресурсами, включая ваш собственный общий объект.

Запуск приложения в APK включает несколько шагов

  1. Процесс system_server получает намерение, запрашивающее ваше приложение.
  2. Процессу зиготы сказано отключить новый процесс и запустить метод вашего класса.
  3. Ваше приложение запускается в новом процессе.

Хотя вы не можете запустить 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.

5
ответ дан 5 December 2019 в 19:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: