Отладка Android NDK в Eclipse - как остановить segfaults / SIGILL, которые возникают только при переходе в нативный код - PullRequest
43 голосов
/ 05 мая 2011

Я настроил отладку в Eclipse для нативного кода с помощью Android NDK (в Windows XP, с Cygwin) до стадии, на которой я могу устанавливать точки останова как в Java, так и в нативном коде, и отладчик будет некорректно работать с ними.Моя проблема в том, что при пошаговом выполнении собственного кода я часто получаю ошибки сегментации / SIGILL, которые не возникают при продолжении после точки останова.

  • Мое приложение отлаживаемо, как определено в AndroidManifest.xml
  • Я изменил (NDK) /build/core/build-binary.mk, чтобы он не удалял символы отладки, когда APP_OPTIM определен как отладка, который находится в файле Application.mk в моемjni directory
  • Я определил LOCAL_CFLAGS := -g -O0 в файле Android.mk, и я также попробовал каждый из этих флагов в отдельности

Я прочитал, что эта проблема связана ссгенерированный оптимизированный код, но отключение оптимизации с помощью -O0 не влияет на мою проблему.Я также сталкивался с использованием флага NDK_BUILD=1 при сборке, но определение debuggable=true в AndroidManifest.xml, очевидно, имеет тот же эффект.

Я пробовал это как на эмуляторе (работает 2.3.3), так ина устройстве (работающем с 2.2 - у которого неожиданно не было проблем с потоками, которых я ожидал), с похожими результатами (хотя, если я правильно помню, сбои происходили в разных точках кода).

Есть ли у кого-нибудь какие-либо проблемы?понимание возможных исправлений / шагов, которые я мог бы попробовать и / или смог успешно пройти нативный код без проблем?

Большое спасибо


Редактировать: Этого никогда не былорешено, но для любого, кто хочет взглянуть на мое руководство по отладке NDK, вы можете найти его здесь .

Edit 2: Ответы, которые я получилэтот вопрос возник после выхода новых версий NDK, и теперь этот вопрос может быть излишним.Мой гид все еще может работать, но я давно не пользуюсь NDK, поэтому не могу ручаться за его правильность.Я принял ответ, который у меня есть, поскольку все трое в основном говорят одно и то же, и это был первый ответ, который был представлен.

Ответы [ 3 ]

2 голосов
/ 15 мая 2012

Если это работает для armeabi, а не для armeabi-v7a, это должно быть проблемой сборки.Разархивируйте файл apk в каталоге bin и убедитесь, что файлы библиотек в armeabi и armeabi-v7a совпадают.

0 голосов
/ 28 марта 2013

скомпилируйте исходные файлы c ++ с -march = armv4

В build / core / combo / arm / yourarch.mk введите -march = armv4, а затем выполните команды show -m mm -B, чтобы проверить, использовался ли он.

Тогда gdbserver может справиться с этим.

0 голосов
/ 13 мая 2012

Одна вещь, которую я заметил, это то, что armeabi-v7a плохо работает для отладки нативного кода на определенных устройствах. Попробуйте построить только для armeabi и посмотрите, поможет ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...