Работаю на 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 или нет.