2010-02-16 1 views
4

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

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

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

В CMD строке:

> 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.6, я обнаружил, что там просто не поддерживает для этого вида отладки строго с НДК. Однако, если вы используете PDK (комплект для разработки платформы), вы можете выполнить такую ​​отладку с помощью собственного кода. Мы не пробовали PDK, потому что генерация файла карты работала достаточно хорошо для нас (см. this SO question), но если вы поедете по этому маршруту, уточните the NDK google group для более подробной информации.