2012-05-10 4 views
36

che sto cercando di ottenere il debugger NDK lavorare, ma senza successo finora.Come far funzionare ndk-gdb su Android?

Per assicurarsi che i miei simboli di debug siano presenti e validi, utilizzo le opzioni del compilatore -O0 e -g, e il parametro ndk-build NDK_DEBUG = 1.

Lo script NDK-gdb corre con le questioni e lancia GDB. Quando fare un comando "SharedLibrary", ottengo questo:

Symbols already loaded for /bla/bla/libMySharedLib.so 

Tuttavia quando provo rottura esecuzione o per esempio aggiungendo un segfault da testare, non ho mai ricevuto nessuno dei simboli da quella libreria nello stack delle chiamate. Gli unici simboli che ho ottenuto provengono da libc, se interrompe l'esecuzione mentre è in attesa di un mutex, ad esempio. Ho anche provato ad aggiungere punti di interruzione senza fortuna. GDB mi consente di aggiungere i punti di interruzione e il codice funziona correttamente, ma i punti di interruzione non vengono mai attivati.

sto usando livello di API 8 come ho bisogno di supportare Android 2.2 (Froyo).

+0

riferito che i loro documenti non funzionano: https://issuetracker.google.com/issues/69223567 la documentazione https://developer.android.com/ndk/guides/ndk-gdb.html, ha ottenuto P999 :-) –

risposta

63

Non è necessario utilizzare -O0 o -g interruttori. Hai bisogno di fare una delle seguenti:

  1. messo android:debuggable="true" al tag <application> in AndroidManifest.xml file di
  2. uso NDK_DEBUG=1 dopo NDK-build
  3. messo APP_OPTIM := debug in Application.mk presentare

Doing chiunque di queste tre cose utilizzerà automaticamente le opzioni -O0 e -g.

Puoi provare a eseguire gdb manualmente, senza sceneggiatura gdb? Coinvolge i seguenti passi:

  1. spingendo gdbserver file /data/local cartella sul dispositivo
  2. esegue l'applicazione & invocando in adb shell seguente comando gdbserver :5055 --attach PID, dove PID è il processo di applicazione id.
  3. esecuzione adb forward tcp:5055 tcp:5055 sull'host
  4. esecuzione arm-linux-androideabi-gdb.exe dalla cartella app
  5. immettendo i seguenti comandi in gdb
  6. set solib-search-path obj/local/armeabi
  7. file obj/local/armeabi/libMySharedLib.so
  8. target remote :5055

e vedere se è possibile eseguire il debug allora.

Se volete vedere i simboli per le altre librerie condivise la libreria sta usando come libc.so, poi tirare da dispositivo (dalla cartella /system/lib) nella cartella obj/local/armeabi.

+1

Per un motivo non correlato ho dovuto ricreare il mio progetto da zero; dopo averlo fatto e aver provato a impostare tutto dal libro, inclusi i suggerimenti Mārtiņš, ha funzionato il debug NDK. Non sono sicuro di quale fosse il problema, sfortunatamente. Btw APP_OPTIM doveva essere impostato su debug (in minuscolo) anziché su Debug. – Simplex

+0

[Re] compilato con l'opzione NDK_DEBUG = 1 ** quando ** chiama 'ndk-build'; non dopo. – soulseekah

+0

dov'è il "ndk-build"? –