Wie debugge ich eine App auf Android mit GDBSERVER?

8

Ich versuche, eine native, gemeinsam genutzte Bibliothek zu debuggen, die meine App über JNI verwendet. Ich kann an eine laufende App gut mit "gdbserver --attach pid" anfügen, aber ich muss meine App tatsächlich starten, wenn ich den gdbserver-Befehl starte.

Es gibt eine Million Blog-Hits zu diesem Thema, aber keine scheint klar zu sein, wie Sie Ihre App starten. Sie alle sagen, nur "gdbserver 10.0.2.2.1234 ./MyProgram" einzugeben, aber was genau ist "MyProgram". Ist das MyProgram.apk? Ist es MyProgram.so? Wird eine andere Datei erstellt, wenn die App installiert wird? Wenn ja, wie ist sein Weg?

    
cjserio 13.01.2010, 12:57
quelle

2 Antworten

4

Obwohl es möglich ist, freistehende Anwendungen zu entwickeln, die direkt von der Shell gestartet werden können, wie andere beschreiben, klingt es, als ob Ihr Code innerhalb des Android-Anwendungs-Frameworks läuft. Daher haben Sie keine ausführbare Datei und stattdessen eine APK, die Ihre Dalvik-Klassendateien zusammen mit anderen Ressourcen einschließlich Ihres systemeigenen Objekts enthält.

Das Starten einer Anwendung in einem APK umfasst mehrere Schritte

  1. Der Prozess system_server empfängt eine Absicht, die Ihre Anwendung anfordert.
  2. Der Zygote-Prozess wird angewiesen, einen neuen Prozess abzuzweigen und eine Methode Ihrer Klasse auszuführen.
  3. Ihre Anwendung wird im neuen Prozess ausgeführt.

Obwohl Sie ein APK nicht direkt starten können, indem Sie eine ausführbare Datei an gdbserver übergeben, ist es ziemlich einfach, es über die Shell mit dem Befehl am zu starten.

%Vor%

Sobald Ihre Anwendung ausgeführt wird, verwenden Sie gdbserver --attach <pid> wie zuvor. Wenn Sie Glück haben, wartet Ihre Anwendung auf eine Benutzerinteraktion, bevor sie in Ihren systemeigenen Code aufruft, um Ihnen die Möglichkeit zu geben, Ihre Haltepunkte in GDB anzuhängen und festzulegen.

    
Tim Kryger 07.05.2010, 19:55
quelle
4

Google bietet eine offizielle Lösung für Ihr Problem: 'ndk-gdb'

Es ist in der NDK enthalten. IIRC, es erfordert, dass Sie eine Kopie von gdbserver in Ihrem APK gebündelt haben; IIRC, dies geschieht automatisch, wenn Sie Ihre APK mit 'ndk-build' erstellt und die entsprechenden Argumente angegeben haben.

Siehe die Google-Dokumentation in $ NDK / docs / NDK-BUILD.html und $ NDK / docs / NDK-GDB.html

& lt; / ryan & gt;

    
Ryan V. Bissell 05.10.2011 16:49
quelle

Tags und Links