Как заставить ndk-gdb работать на Android?

Я пытаюсь заставить отладчик NDK работать, но пока не добился успеха.

Чтобы убедиться, что мои отладочные символы присутствуют и действительны, я использую параметры компилятора -O0 и -g, а параметр ndk-build NDK_DEBUG = 1.

Скрипт ndk-gdb запускается без проблем и запускает GDB. Когда команда «sharedlibrary», я получаю следующее:

Symbols already loaded for /bla/bla/libMySharedLib.so 

Однако, когда я пытаюсь выполнить выполнение или, например, добавить segfault для тестирования, я никогда не получаю никаких символов из этой библиотеки в стеке вызовов. Единственные символы, которые я получил, – это libc, если я нарушаю исполнение, пока он ждет мьютекса. Также попытался добавить точки останова без везения. GDB позволяет мне добавлять точки останова, и код работает нормально, но точки останова никогда не запускаются.

Я использую API-уровень 8, так как мне нужно поддерживать Android 2.2 (Froyo).

    One Solution collect form web for “Как заставить ndk-gdb работать на Android?”

    Вам не нужно использовать переключатели -O0 или -g. Вам нужно сделать следующее:

    1. поместите android:debuggable="true" в в файле AndroidManifest.xml
    2. используйте NDK_DEBUG=1 после ndk-build
    3. put APP_OPTIM := debug в файле Application.mk

    Выполнение любой из этих трех вещей автоматически будет использовать переключатели -O0 и -g.

    Можете ли вы попробовать запустить gdb вручную, без скрипта gdb? Он включает следующие шаги:

    1. нажатие файла gdbserver на /data/local folder на устройстве
    2. запуская ваше приложение и вызывая в adb shell следующую команду gdbserver :5055 --attach PID , где PID – это ваш идентификатор процесса приложения.
    3. запуск adb forward tcp:5055 tcp:5055 на хосте
    4. запустить arm-linux-androideabi-gdb.exe из папки вашего приложения
    5. ввод следующих команд в gdb
    6. set solib-search-path obj/local/armeabi
    7. file obj/local/armeabi/libMySharedLib.so
    8. target remote :5055

    И посмотрим, сможете ли вы отлаживать тогда.

    Если вы хотите видеть символы для других разделяемых библиотек, которые использует ваша библиотека, например libc.so , вытащите их из устройства (из папки /system/lib ) в свою папку obj/local/armeabi .

    Interesting Posts

    Поддержка Bluetooth в Android Emulator

    Определите, является ли JSON JSONObject или JSONArray

    Двойной экран ПК понижен до одного экрана, программы работают на втором экране

    Почему неуказанное поведение `i = ++ i + 1`?

    Win7 не будет устанавливать общий ресурс WinXP

    Каков самый простой способ шифрования каталога? (На Ubuntu)

    Манифест Java-апплета – разрешить все возможности Caller-Allowable-Codebase

    Когда перегрузка проходит по ссылке (l-value и r-value), предпочтительной для передачи по значению?

    как иметь дело с google-картой внутри скрытого div (обновленное изображение)

    Visual Studio – поиск по коду для китайского текста

    соглашения об именах имен

    Убить другое приложение на Android?

    Лучший способ управлять ProgressDialog из AsyncTask

    Запускать внешнюю программу с Java, читать вывод, разрешать прерывание

    Стеганографическое программное обеспечение

    Давайте будем гением компьютера.