Как запустить исполняемый файл Dalvik с GDB на Android? - PullRequest
2 голосов
/ 06 мая 2011

Я хочу отладить приложение на Android с помощью GDB, я могу подключить его с помощью gdb и номера процесса, но я хочу посмотреть, что оно делает с самого начала.

Есть ли способ сделать это?

Ответы [ 2 ]

4 голосов
/ 06 мая 2011

На рутированном устройстве или эмуляторе вы можете подключить gdb к zygote и поставить точку останова там, где вновь разветвленный процесс должен принять идентичность запускаемого приложения.

Вероятно, будет проще, если вы измените zygote, чтобы дождаться присоединения отладчика. Я полагаю, что в системе отладки Jdwp есть что-то подобное, что может привести вас к отладчику Java на ранних этапах запуска этого кода, но я не знаю чего-то сравнимого с уже встроенным GDB. Хотя я полагаю, вы могли бы ожидать его ожидания для jdwp и присоедините gdb перед тем, как присоединять (а затем отсоединять) отладчик java.

Обновление: я попробовал это, прикрепив к zygote с помощью gdb и изменив одно слово кода, которое будет выполнено вначале дочерним элементом, чтобы перейти в бесконечный цикл, а затем отсоединиться от zygote. Я подумал, что я запишу нового ребенка, как только он появится в «ps», и восстановлю его, чтобы он мог продолжаться. Проблема в том, что ребенка убивают (предположительно, за то, что он не отвечает) быстрее, чем я могу получить все введенные команды. Так что это должно быть сделано программой. И, возможно, не так много вы сможете увидеть на ранних этапах, не останавливаясь и не убивая его - я имею в виду, что вы, вероятно, могли бы получить там немного, но что вы надеетесь узнать, чего вы не можете извлечь из чтения источника?

2 голосов
/ 06 мая 2011
Страница

OMAPpedia Android Отладка имеет хороший обзор использования gdbclient.

gdbclient <executable name> <port number> <task name>
  • имя исполняемого файла: имя файла в каталоге system / bin
  • номер порта: по умолчанию: 5039 (требуетсядвоеточие перед числом)
  • имя задачи: получено путем запуска "ps" на цели.GDB использует его для внутренней идентификации PID.

Возможно, вам потребуется настроить переадресацию порта сначала с adb, например:

adb forward tcp:5039 tcp:5039
...