Я пытаюсь отлаживать смешанный код на Android (Java/C/C++). Мое целевое устройство — Vizio 1008. Код работает на эмуляторе, и я могу отлаживать его из Eclipse с помощью GDB. Однако я не могу сделать это на реальном устройстве.
После нескольких дней борьбы с этим я локализовал проблему:
Когда GDBSERVER запускается на устройстве (успешно), он немедленно завершает работу с сообщением: «Запрошен неизвестный регистр d0». Поэтому сеанс отладки невозможен. Я также попробовал отладчик DS-5 от ARM. GDBSERVER остается подключенным, но завершается при попытке подключения из удаленного отладчика. Я попробовал отладочный вывод GDBSERVER, но он не дает никакой полезной информации.
Что еще более странно, я пробовал любую версию GDBSERVER, которую только мог получить, и все они вели себя так. Однако я нашел GDBSERVER в одной из старых версий Google NDK (3 или 4 версии назад). И эта версия РАБОТАЕТ!!! Но отладчик (на хосте) очень скоро умирает (ошибка сегментации), даже я знаю, что программа в порядке.
Я посмотрел исходный код GDBSERVER, и, похоже, эта ошибка связана с последовательностью запуска, когда GDBSERVER проверяет оборудование. Вероятно, это связано с сопроцессором с плавающей запятой, но я не уверен, так как это сообщение об ошибке довольно общее.
Если это имеет значение, я разрабатываю Windows с помощью Google NDK. Код на 99% состоит из C/C++ с оболочкой Java и несколькими функциями, реализованными на Java (потоковые вызовы HTTP). Опять же, приложение работает на устройстве и может быть отлажено (как Java, так и C/C++) на эмуляторе. Я также могу отлаживать часть Java на устройстве.
Кто-нибудь знает, что это может быть? И как это исправить? Это Визио?
Заранее спасибо.