Domanda

Sto cercando di eseguire il debug di un'applicazione Android che chiamare codice nativo per fare un po 'il rendering GL. Il codice nativo è il codice che sto cercando di porta (e che io non so davvero che bene) esistente. Ho il codice esistente compilazione, linking, e l'installazione in modo corretto, e ho alcune funzioni native che chiamano a quel codice che vengono correttamente chiamato dal mio codice Java. Sto diventando un segfault che sto cercando di rintracciare, e avendo alcuni problemi ottenere gdb per impostare un punto di interruzione nel programma. Questo è su Windows XP con Cygwin -. Io e probabilmente dovrebbe parlare sto ancora imparando gdb

Ho iniziato con le direzioni http: / /honeypod.blogspot.com/2008/01/debug-native-application-for-android.html ; ecco quello che sto facendo attualmente.

Avviare l'applicazione nell'emulatore.

In un prompt 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

In una shell 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.

Quindi sembra che il punto di interruzione viene impostata ok, e che i simboli sono ok, ma forse l'indirizzo è sbagliato quando si tenta di inserire il punto di interruzione. Ho provato diverse varianti di diversi comandi dalla pagina web di cui sopra, ma finora, senza fortuna.

Tutte le idee che cosa sta succedendo?

Grazie

È stato utile?

Soluzione

In sostanza, a questo punto con NDK 1.6, ho trovato che non c'è solo il supporto per questo tipo di debug strettamente con l'NDK. Tuttavia, se si utilizza il PDK (kit di sviluppo della piattaforma), si può fare questo tipo di debug con codice nativo. Non abbiamo provato il PDK, perché la generazione di un file di mappa ha funzionato abbastanza bene per noi (vedi questa domanda SO ), ma se si fa seguire questa strada, controllare NDK gruppo Google per ulteriori dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top