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?
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
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.
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.
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;