2012-05-10 9 views
36

Ich versuche, den NDK-Debugger zu arbeiten, aber bisher ohne Erfolg.Wie funktioniert ndk-gdb unter Android?

Um sicherzustellen, dass meine Debugsymbole vorhanden und gültig sind, verwende ich die Compileroptionen -O0 und -g und den ndk-build-Parameter NDK_DEBUG = 1.

Das Skript ndk-gdb läuft ohne Probleme und startet GDB. Wenn ein „sharedlibrary“ Befehl tun, bekomme ich diese:

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

aber wenn ich versuche, die Ausführung zu brechen oder z.B. Wenn ich einen zu testenden segfault hinzufüge, bekomme ich keines der Symbole aus dieser Bibliothek in der Aufrufliste. Die einzigen Symbole, die ich bekommen habe, stammen von libc, wenn ich die Ausführung unterbrechen muss, während ich zum Beispiel auf einen Mutex warte. Habe auch versucht, Haltepunkte ohne Glück hinzuzufügen. GDB lässt mich die Haltepunkte hinzufügen, und der Code läuft gut, aber die Haltepunkte werden nie ausgelöst.

Ich benutze API Level 8, wie ich Android 2.2 (Froyo) unterstützen muss.

+0

Berichtet, dass ihre Dokumente nicht funktionieren: https://issuetracker.google.com/issues/69223567 die Dokumentation https://developer.android.com/ndk/guides/ndk-gdb.html, es hat P999 :-) –

Antwort

63

Sie müssen die Schalter -0 oder -g nicht verwenden. Sie benötigen ein von dem tun folgendes:

  1. android:debuggable="true" zum <application> Tag in AndroidManifest.xml Datei setzen
  2. Verwendung NDK_DEBUG=1 nach NDK-build
  3. setzen APP_OPTIM := debug in Application.mk

Datei Doing Jeder dieser drei Dinge verwendet automatisch die Schalter -O0 und -g.

Können Sie versuchen, gdb manuell ohne gdb-Skript auszuführen? Es beinhaltet folgende Schritte:

  1. gdbserver Datei zu /data/local Ordner auf Geräte-ID
  2. läuft Ihre Anwendung & rufenden in adb shell folgenden Befehl gdbserver :5055 --attach PID, wobei PID Ihre Bewerbungsprozess schieben.
  3. adb forward tcp:5055 tcp:5055 auf dem Host läuft
  4. arm-linux-androideabi-gdb.exe aus dem App-Ordner laufen
  5. Eingabe folgenden Befehle in gdb
  6. set solib-search-path obj/local/armeabi
  7. file obj/local/armeabi/libMySharedLib.so
  8. target remote :5055

Und sehen, ob Sie dann debuggen können.

Wenn Sie Symbole für andere gemeinsam genutzte Bibliotheken sehen möchten, die Ihre Bibliothek verwendet, wie libc.so, ziehen Sie sie vom Gerät (aus dem Ordner /system/lib) in Ihren Ordner obj/local/armeabi.

+1

Aus einem anderen Grund musste ich mein Projekt von Grund auf neu erstellen; Nachdem Sie dies getan und versucht haben, alles nach dem Buch einzurichten, einschließlich Ihrer Vorschläge Mārtiņš, funktionierte das NDK-Debugging. Ich bin mir nicht sicher, was das Problem leider war. Btw APP_OPTIM musste auf debug (Kleinbuchstaben) und nicht auf Debug gesetzt werden. – Simplex

+0

[Re] mit der Option NDK_DEBUG = 1 erstellt **, wenn ** "ndk-build" aufgerufen wird; nicht danach. – soulseekah

+0

wo ist der "ndk-build"? –

Verwandte Themen