eXeL@B —› Вопросы новичков —› Отладка нативных (NDK) Android-приложений без исходников с помощью gdb. Не могу загрузить библиотеку |
Посл.ответ | Сообщение |
|
Создано: 29 августа 2016 20:27 · Личное сообщение · #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 запускать так: Code:
Вроде бы все нормально, однако когда вызываю info functions, то получаю адреса не в памяти, а в самой библиотеке на компе, соответственно брекпоинты не ставятся. На Windows я это делал с помощью symbol-file remote:test.exe которую выполнял после подключения (target remote). Однако с Android такое не получается, эта команда не поддерживается. Я на 99% уверен, что все очень просто, мне всего лишь надо найти аналог symbol-file, от Вас нужно реальное решение, которым лично Вы пользуетесь, и оно у вас работает. Если вы используете gdb для Android, то, думаю, вам не составит труда мне помочь. |
|
Создано: 29 августа 2016 20:35 · Поправил: reversecode · Личное сообщение · #2 был ли использован всемогучий гугл для решения этой ерунды ? Debug symbols You typically compile your .so library with debug symbols. But it makes good sense to strip those symbols off before uploading your binary to the Android device. Binary will be smaller (which means faster installation time of the apk package), will occupy less memory and will run faster. So you upload stripped version of your libraries to the Android device and keep unstripped versions on your PC. To tell gdb the path to the unstripped libraries run this command from gdb shell set solib-search-path obj/local/armeabi You can enter more paths and separate them by colon (: ) character. | Сообщение посчитали полезным: AcidFlower |
|
Создано: 29 августа 2016 20:48 · Личное сообщение · #3 reversecode, был. И что-то вроде "set solib-search-path" тоже пробовал - но после того, как я выполнял эту команду, просто ничего не происходило и не менялось. 1) Что именно нужно передавать в set solib-search-path? Везде по-разному, где-то передается путь к подопытной либе на компе как у вас в цитате, где-то путь к подопытной либе на Android, где-то еще и путь к system_lib на Android... 2) Эту команду вызывать сразу после target remote, верно? 3) Что должно произойти после ее выполнения? Что нужно сделать еще? Если эта команда только "tell gdb the path", (только указывает пути), то потом должна быть и еще одна, которая собственно загрузит библиотеки по указанному пути? Или нет? |
|
Создано: 29 августа 2016 20:55 · Личное сообщение · #4 |
|
Создано: 29 августа 2016 21:02 · Личное сообщение · #5 |
eXeL@B —› Вопросы новичков —› Отладка нативных (NDK) Android-приложений без исходников с помощью gdb. Не могу загрузить библиотеку |