Pergunta

Estou tentando depurar um aplicativo Android que chama o código nativo para fazer alguma renderização GL. O código nativo é o código existente que estou tentando portar (e que eu realmente não sei disso). Eu tenho o código existente compilando, vinculando e instalando corretamente, e tenho algumas funções nativas que chamam esse código que estão sendo chamadas corretamente do meu código Java. Estou recebendo um Segfault que estou tentando rastrear e tendo alguns problemas para fazer com que o GDB defina um ponto de interrupção no programa. Isso está no Windows XP com o Cygwin - e eu provavelmente deveria mencionar que ainda estou aprendendo o GDB.

Comecei com as instruções em http://honeypod.blogspot.com/2008/01/debug-native-application-for-android.html; Aqui está o que estou fazendo atualmente.

Inicie o aplicativo no emulador.

Em um prompt de 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

Em uma concha de 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.

Parece que o ponto de interrupção é definido e que os símbolos estão bem, mas talvez o endereço esteja errado quando tenta inserir o ponto de interrupção. Eu tentei várias variações de comandos diferentes da página da web mencionados acima, mas até agora, sem sorte.

Alguma ideia sobre o que se passa?

Obrigado

Foi útil?

Solução

Essencialmente, neste ponto com o NDK 1.6, descobri que simplesmente não há suporte para esse tipo de depuração estritamente com o NDK. No entanto, se você usar o PDK (Kit de Desenvolvimento da Plataforma), poderá fazer esse tipo de depuração com o código nativo. Não experimentamos o PDK, porque a geração de um arquivo de mapa funcionou bem o suficiente para nós (veja isso é tão pergunta), mas se você seguir esse caminho, verifique O Grupo NDK do Google para mais detalhes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top