Bien qu'il soit possible de développer des applications autonomes qui peuvent être lancées directement à partir du shell comme d'autres le décrivent, il semble que votre code fonctionne dans le cadre de l'application Android. Par conséquent, vous n'avez pas d'exécutable et vous disposez à la place d'un fichier APK contenant vos fichiers de classe Dalvik avec d'autres ressources, y compris votre objet partagé natif.
Lancement d'une application dans un APK implique plusieurs étapes
- Le processus de system_server reçoit l'intention de demander votre demande.
- Le processus zygote reçoit l'instruction de lancer un nouveau processus et d'exécuter une méthode de votre classe.
- Votre application s'exécute dans le nouveau processus.
Alors que vous ne pouvez pas lancer un APK directement par le passage d'un exécutable à gdbserver, son assez facile à déclencher un lancement depuis le shell en utilisant la commande am
.
$ adb -d shell
# am
usage: am [subcommand] [options]
start an Activity: am start [-D] <INTENT>
-D: enable debugging
send a broadcast Intent: am broadcast <INTENT>
start an Instrumentation: am instrument [flags] <COMPONENT>
-r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
-e <NAME> <VALUE>: set argument <NAME> to <VALUE>
-p <FILE>: write profiling data to <FILE>
-w: wait for instrumentation to finish before returning
start profiling: am profile <PROCESS> start <FILE>
stop profiling: am profile <PROCESS> stop
<INTENT> specifications include these flags:
[-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]
[-c <CATEGORY> [-c <CATEGORY>] ...]
[-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
[--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
[-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
[-n <COMPONENT>] [-f <FLAGS>] [<URI>]
# am start -n com.android.browser/.BrowserActivity
Starting: Intent { cmp=com.android.browser/.BrowserActivity }
#
Une fois votre application est en cours d'exécution, utilisez gdbserver --attach <pid>
comme vous avez avant. Si vous êtes chanceux, votre application attend une interaction de l'utilisateur avant d'appeler votre code natif pour vous donner une chance d'attacher et de définir vos points d'arrêt dans GDB.