Cette page fournit des informations détaillées à l'aide de LLDB pour le développement de systèmes d'exploitation. Pour en savoir plus sur le développement d'applications, consultez Déboguer votre application à la place, qui explique comment utiliser l'IUG Android Studio (basée sur LLDB).
GDB n'est plus compatible ni fourni. Si vous passez de GDB à LLDB, vous devez commencez probablement par lire Tutoriel LLDB Si vous êtes un utilisateur GDB expert, Mappage de commandes GDB vers LLDB est très utile lors de la transition.
Prérequis
Pour utiliser un débogueur:
- Configurez l'environnement de compilation à l'aide de la commande
envsetup.sh
habituelle. - Exécutez la même commande
lunch
que celle utilisée lors de la compilation. Notez que le déjeuner doit correspondre exactement à l'appareil que vous déboguez. Si le plat ne correspond pas à l'appareil connecté, un message d'erreur s'affiche sous la forme suivante:You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
- Connectez votre appareil à la machine.
Si vous avez besoin d'aide pour configurer votre environnement, consultez Configurez l'environnement.
Déboguer un binaire
Pour déboguer un binaire créé sur votre machine, vous devez d'abord le copier sur l'appareil puis lancez le débogueur. Exemple :
adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe
Déboguer les applications ou processus en cours d'exécution
Pour vous connecter à une application ou à un daemon natif en cours d'exécution, utilisez
lldbclient.py
par un PID. Par exemple, pour déboguer le processus avec PID
1234, exécutez cette commande sur l'hôte:
lldbclient.py -p 1234
Le script configure le transfert de port, lance le processus bouchon de débogage à distance sur l'appareil, démarre le débogueur sur l'hôte, le configure pour trouver les symboles et connecte au bouchon de débogage distant.
Déboguer le démarrage du processus natif
Pour déboguer un processus en cours de démarrage, utilisez lldbclient.py
avec -r
. Par exemple, pour déboguer ls /bin
, exécutez la commande suivante sur l'hôte:
lldbclient.py -r /system/bin/ls /bin
Saisissez ensuite continue
à l'invite du débogueur.
Déboguer le démarrage de l'application
Parfois, vous souhaitez déboguer une application au démarrage (en cas de plantage, par exemple).
et que vous voulez parcourir le code pour voir ce qui s'est passé avant le plantage.
Dans certains cas, il est possible d'associer
impossible car l'application plante
avant que vous ne puissiez joindre. La
Approche logwrapper
(utilisée pour strace
)
ne fonctionne pas toujours, car il est possible que l'application ne dispose pas
les autorisations nécessaires pour ouvrir un port, et lldbserver
hérite de ce
ou d'une restriction d'accès.
Pour déboguer le démarrage de l'appli, utilisez les options pour les développeurs dans les paramètres pour demander à l'application d'attendre l'association d'un débogueur Java:
- Accédez à Paramètres > Options pour les développeurs > Sélectionnez l'application de débogage, puis choisissez votre application dans la liste, puis cliquez sur Attendre le débogueur.
- Démarrez l'application à partir du lanceur d'applications ou à l'aide de la ligne de commande suivante:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- Attendez que l'application soit chargée et qu'une boîte de dialogue s'affiche pour vous indiquer qu'elle est en attente d'un débogueur.
- Joindre
lldbserver
/lldbclient
normalement, définir des points d'arrêt, puis continuez le processus.
Pour permettre à l'application de s'exécuter, joignez un protocole JDWP (Java Debug Wire Protocol) tel que Java Debugger (jdb):
adb forward tcp:12345 jdwp:XXX # (Where XXX is the PID of the debugged process.)
jdb -attach localhost:12345
Déboguer des applications ou des processus qui plantent
Si vous voulez que debuggerd
suspende les processus plantés afin que vous puissiez
et joindre un débogueur, définissez la propriété appropriée:
- Après Android 11
adb shell setprop debug.debuggerd.wait_for_debugger true
- Android 11 ou version antérieure
adb shell setprop debug.debuggerd.wait_for_gdb true
- Android 6.0 Marshmallow et versions antérieures
adb shell setprop debug.db.uid 999999
À la fin de la sortie de plantage habituelle, debuggerd
permet d'effectuer un copier-coller
des instructions dans Logcat montrant comment
connecter le débogueur au processus interrompu.
Déboguer avec VS Code
LLDB prend en charge le débogage du code de la plate-forme sur Visual Studio Code Vous pouvez utiliser l'interface du débogueur VS Code au lieu de l'interface CLI LLDB pour contrôler et déboguer le code natif exécuté sur les appareils.
Avant d'utiliser VS Code pour le débogage, installez <ph type="x-smartling-placeholder"></ph> Extension CodeLLDB
Pour déboguer du code avec VS Code:
- Assurez-vous que tous les artefacts de compilation (tels que les symboles) requis pour s'exécuter
lldbclient.py
oulldbclient.py
sont présents. - Dans VS Code, appuyez sur Ctrl+Maj+P pour exécuter une commande, puis recherchez Debug (Déboguer) :
Ajouter une configuration..., puis sélectionnez LLDB.
Un fichier
launch.json
s'ouvre et un nouvel objet JSON est ajouté à une liste. - Remplacez la configuration de débogueur nouvellement ajoutée par deux lignes de commentaire :
// #lldbclient-generated-begin
et// #lldbclient-generated-end
. que votre liste de configuration se présente comme suit:"configurations": [ // #lldbclient-generated-begin // #lldbclient-generated-end ]
lldbclient.py
utilise ces commentaires pour détecter où écrire la configuration. S'il y a sont d'autres éléments dans la liste, ajoutez les lignes de commentaire à la fin après les autres configurations. - Exécutez la commande suivante dans le terminal où vous avez exécuté
envsetup.sh
etlunch
:lldbclient.py --setup-forwarding vscode-lldb \ --vscode-launch-file LAUNCH_JSON_PATH \ ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
lldbclient.py
écrit la configuration générée danslaunch.json
et continue de s'exécuter. C'est normal. ne arrêtez pas le programmelldbclient.py
. Si vous omettez--vscode-launch-file
. Le script affichera l'extrait de code JSON que vous vous devrez copier et coller manuellement danslaunch.json
.L'indicateur
-r
doit être le dernier s'il est présent en raison de la manière dont les indicateurs sont analysés. par l'outil. - Ouvrez la barre latérale Run and Debug (Exécuter et déboguer). La nouvelle configuration doit apparaître dans le
de la liste des débogueurs. Appuyez sur Démarrer le débogage (F5). Le débogueur devrait se connecter après
de 10 à 30 secondes.
Si la nouvelle configuration n'apparaît pas dans la vue "Run and Debug" (Exécuter et déboguer), actualisez la fenêtre pour Pour actualiser la liste des débogueurs, appuyez sur Ctrl + Maj + P, puis saisissez
reload window
- Lorsque vous avez terminé le débogage, accédez au terminal exécutant
lldbclient.py
et appuyez sur Entrée pour mettre fin à la Programmelldbclient.py
. Les exécutions ultérieures du script généreront la configuration entre les commentaires#lldbclient-generated
et remplacer l'ancien contenu, vous ne devez pas vous devrez les supprimer manuellement.
Pour ajouter des propriétés personnalisées à la configuration de lancement générée, vous pouvez utiliser la méthode
--vscode-launch-props
. Par exemple:
lldbclient.py --setup-forwarding vscode-lldb \
--vscode-launch-props \
'{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
...
Avec ces exemples de propriétés, VS Code exécute une tâche nommée Build
avant le débogage et
ajoute une étape d'initialisation de débogage aux étapes générées par le script. Vous trouverez
des propriétés disponibles
<ph type="x-smartling-placeholder"></ph>
dans la documentation VS Code et dans le manuel utilisateur
<ph type="x-smartling-placeholder"></ph>
Extension CodeLLDB.