LINUX.ORG.RU
ФорумMobile

Отладка нативных (NDK) Android-приложений без исходников с помощью gdb. Не могу загрузить библиотеку

 , , ,


0

1

Работаю на Genymotion, соответственно права полные (рут). Все делаю по туториалам. 1. Запускаю подопытное приложение, при этом входящая в него библиотека (lib***.so) загружается с помощью System.loadLibrary и ее функции работают. 2. Открываю adb shell, запускаю gdbserver, аттачу его к PID'у подопытного приложения. Все ОК. 3. Затем adb forward, затем gdb, в его консоли подключаюсь target remote. Все ОК. 4. Пробую команду continue - приложение перестает «висеть» под отладкой и продолжает выполняться. Все ОК. 5. Но вот, собственно, загрузить из библиотеки символы у меня не получается. А из-за этого я не могу вызвать info functions и не могу поставить брекпоинты. Я просто не могу «объяснить» gdb, что мне нужна именно такая-то библиотека, чтобы он загрузил из нее символы и я мог с ней работать.

Пробовал по разным туториалам, по-разному. Например, пробовал gdb запускать так:

gdb D:\Путь-на-моем-компе\libTest.so

Вроде бы все нормально, однако когда вызываю info functions, то получаю адреса не в памяти, а в самой библиотеке на компе, соответственно брекпоинты не ставятся.

На Windows я это делал с помощью symbol-file remote:test.exe которую выполнял после подключения (target remote). Однако с Android такое не получается, эта команда не поддерживается.

Я на 99% уверен, что все очень просто, мне всего лишь надо найти аналог symbol-file, от Вас нужно реальное решение, которым лично Вы пользуетесь, и оно у вас работает. Если вы используете gdb для Android, то, думаю, вам не составит труда мне помочь.

И еще один вопрос

А может, дело попросту в том, что я вместо кошерного gdb из «родного» NDKовского ARMовского тулчайна, использую gdb.exe из MinGW? Дело в том, что с «родным» тулчайном что-то не заладилось, и я решил не возиться с не вполне понятными ошибками (уже на этапе подключения), а облегчить путь с помощью MinGW, с которым вроде бы получалось вплоть до continue, ну вот и «облегчил», видимо. Нужен точный ответ на этот вопрос - подходит MinGW или нет.



Последнее исправление: gdbserver (всего исправлений: 3)

Работаю на Genymotion

Зп хорошая? Какие условия труда? Нормированный ли рабочий день?

andreyu ★★★★★
()

Нужен точный ответ на этот вопрос - подходит MinGW или нет.

За точным ответом вам нужно обратиться к разработчикам mingw.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Почему не ndk-gdb

А если ndk-gdb, то вы ответите на вопрос, т.е. опишете процесс загрузки символов из библиотеки?

gdbserver
() автор топика
Ответ на: комментарий от andreyu

подходит MinGW или нет

Зачем к разработчикам? Достаточно, чтобы хотя бы один человек, имеющий опыт, поделился таковым.

gdbserver
() автор топика
Ответ на: комментарий от andreyu

Зп хорошая? Какие условия труда? Нормированный ли рабочий день?

Вообще-то я написал на, а не в, поэтому ваш прикол как-то боком. Но все же отвечу: условия не очень, зарплата тоже не 200 тыров в месяц, а рабочий день вообще никакой до тех пор, пока вот с gdb не разберусь.

gdbserver
() автор топика
Ответ на: подходит MinGW или нет от gdbserver

Зачем к разработчикам? Достаточно, чтобы хотя бы один человек, имеющий опыт, поделился таковым.

Вы же требуете «точный ответ на этот вопрос», а это только разработчик может сказать.

andreyu ★★★★★
()

Вообще-то я написал на, а не в, поэтому ваш прикол как-то боком.

Как вам такое - «я работаю на Дядю» и «я работаю в Дядю»?

Но все же отвечу: условия не очень, зарплата тоже не 200 тыров в месяц, а рабочий день вообще никакой до тех пор, пока вот с gdb не разберусь.

Так вы определитесь, работаете вы НА Genymotion (к примеру, как удаленный сотрудник) или работаете В Genymotion?

andreyu ★★★★★
()
Ответ на: Почему не ndk-gdb от gdbserver

А если ndk-gdb, то вы ответите на вопрос, т.е. опишете процесс загрузки символов из библиотеки?

Вы наверное решили, что я вам чем-то обязан?

andreyu ★★★★★
()
Ответ на: Почему не ndk-gdb от gdbserver

А если ndk-gdb, то вы ответите на вопрос, т.е. опишете процесс загрузки символов из библиотеки?

для начала, а в этой библиотеке символы вообще есть?

помочь скорее всего не смогу, т.к. опыт есть только с ndk-gdb, и в основном печальный.

я не пробовал все это под вендой, но мне удавалось пару раз отладить свой проект под ndk-gdb на маке, и символы подхватывались автоматически. даже запускать gdbserver вручную не приходилось — просто в developer settings что-то натыкал (Select debug app).

waker ★★★★★
()
Ответ на: комментарий от andreyu

мне показалось, что он имел ввиду использование эмулятора Genymotion, а не работу в компании с этим названием.

waker ★★★★★
()
Ответ на: комментарий от waker

отладочной инфы нет. но на винде вот любой exeшник можно запустить под gdb и отлаживать бреками. на убунте тоже. и андроидовские приложения тоже можно, судя по многочисленным туториалам

проблема только с genymotion, или на нексусе то же самое?

пока пробовал только его. это мысль - попробовать avd и реальный девайс, хоть у меня и не нексус далеко. но думаю проблема все-таки не на стороне андроида

gdbserver
() автор топика
Ответ на: комментарий от gdbserver

если инфы нет вообще никакой — то какие именно символы ты хочешь загрузить?

а если она есть - она должна сама подтаскиваться gdbserver'ом.

я так понял, что код не твой. может из него все что можно вырезали, или зашифровали, чтобы затруднить отладку?

waker ★★★★★
()
Ответ на: комментарий от gdbserver

но думаю проблема все-таки не на стороне андроида

как думаешь, почему практически никто из андроид-разработчиков не использует эмуляторы? :)

waker ★★★★★
()
Ответ на: комментарий от waker

info functions хочу. потом бреки поставить, и continue. код пока что мой. учебный. скомпилирован с дебагом или нет - не помню. для info functions это не суть.

она должна сама подтаскиваться gdbserver'ом.

опиши процесс или скинь ссылку на мануал по которому ты делал

вообще я сам вчера наткнулся на странную проблему с одним эмулятором айфона, вернее даже не эмулятором, что еще более странно. а на девайсе ее не было. но все же не думаю

gdbserver
() автор топика
Ответ на: комментарий от gdbserver

опиши процесс или скинь ссылку на мануал по которому ты делал

подробностей не помню, но, по-моему, просто запустил ndk-gdb как описано в документации, приаттачился автоматически, после включения нужных опций в Developer settings, и ставил breakpoints. мой код был скомпилирован через `ndk-build NDK_DEBUG=1`.

info functions не пользовался.

edit: небольшое уточнение: я писал выше, что опыт в основном был печальный. в 99% случаев, все это просто не работало, т.е. дебаггер не аттачился корректно, или сразу детачился после continue, или висел, или еще что-то такое. но в те пару раз когда он таки сработал — символы подтягивались автоматически.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.