GDB Ошибка ввода / вывода удаленной отладки на Android - PullRequest
5 голосов
/ 17 февраля 2010

Я пытаюсь отладить приложение для Android, которое вызывает нативный код для визуализации GL. Нативный код - это существующий код, который я пытаюсь перенести (и который я не очень хорошо знаю). У меня есть существующий код, компилирующий, связывающий и устанавливающий правильно, и у меня есть некоторые встроенные функции, которые вызывают этот код, который правильно вызывается из моего кода Java. Я получаю segfault, который пытаюсь отследить, и у меня возникают проблемы с получением GDB для установки точки останова в программе. Это на Windows XP с Cygwin - и я должен упомянуть, что я все еще изучаю GDB.

Я начал с указаний в http://honeypod.blogspot.com/2008/01/debug-native-application-for-android.html; вот что я сейчас делаю.

Запустите приложение в эмуляторе.

В командной строке:

> adb forward tcp:1234 tcp:1234
> adb shell
# gdbserver localhost:1234 --attach 2120
gdbserver localhost:1234 --attach 2120
Attached; pid = 2120
Listening on port 1234

В оболочке cygwin:

arm-eabi-4.2.1/bin/arm-eabi-gdb.exe out/apps/app-android/libDM.so
GNU gdb 6.6
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-cygwin --target=arm-elf-linux"...
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
warning: shared library handler failed to enable breakpoint
0xafe0da04 in AppRefCounted::unref () at ../../stlport/stl/_iosfwd.h:39
39      class basic_ostream;
Current language:  auto; currently c++
(gdb) b Java_com_app_AppRenderer_onCreate
Breakpoint 1 at 0xafff1b1a: file apps/app-android/../../../app-Android/jni/DMJNI/DMInterface.cpp, line 75.
(gdb) c
Continuing.
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0xafff1b1a: Input/Output error.

Таким образом, похоже, что точка останова установлена ​​нормально, и символы в порядке, но, возможно, адрес неправильный, когда он пытается вставить точку останова. Я пробовал несколько вариантов различных команд с веб-страницы, на которую ссылались выше, но пока что не повезло.

Есть идеи, что происходит?

Спасибо

1 Ответ

1 голос
/ 25 февраля 2010

По сути, на данный момент с NDK 1.6 я обнаружил, что просто нет поддержки такого рода отладки строго с NDK.Однако, если вы используете PDK (комплект разработки платформы), вы можете выполнять отладку такого рода с помощью собственного кода.Мы не пробовали PDK, потому что генерация файла карты работала достаточно хорошо для нас (см. этот вопрос ), но если вы все же выберете этот путь, проверьте группу Google NDK для более подробной информации.

...