table des matières
Deux, la construction de l'environnement
Troisièmement, le processus de débogage
Quatre, commandes gdb couramment utilisées
1. Principe
Les systèmes embarqués exécutent généralement l'outil gdb côté PC, et le code source est également côté PC.Le fichier exécutable correspondant au code source est placé sur la carte de développement pour être exécuté. Pour cela, nous devons exécuter gdbserver sur la carte de développement et communiquer avec gdb côté PC via le réseau. Par conséquent, si vous voulez déboguer un programme intégré via gdb sur un PC, vous avez besoin de deux choses: gdb et gdbserver, où gdb s'exécute sur le PC, et gdbserver a besoin que nous soyons transplantés sur la carte de développement.
Deux, la construction de l'environnement
Généralement, la compilation croisée est déjà fournie avec gdb et gdbserver, vous pouvez utiliser le compilateur croisé intégré directement sans portage, copier gdbserver directement dans le répertoire / usr / bin du système de fichiers racine et utiliser le service nfs après le démarrage de la carte de développement. Le système de fichiers sous ubuntu ; si le compilateur croisé ne l'accompagne pas, vous devez télécharger le code source pour l'installer
1. Le compilateur croisé est livré avec
installation Manuel:
Copiez gdbserver dans le système de fichiers racine rootfs / usr / bin :
sudo cp /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/gdbserver /home/denghengli/linux/nfs/rootfs/usr/bin/
2. Étapes de téléchargement et d'installation du code source
légèrement. . .
Troisièmement, le processus de débogage
1. Compilez le code source dans un fichier exécutable avec des informations de débogage, puis copiez-le sur la carte de développement. Par exemple, un fichier gdbtest.c est écrit sous ubuntu et le fichier exécutable gdbtest sera envoyé à la carte de développement une fois la compilation terminée
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
unsigned int times = 0;
while (1)
{
printf("runging times: %d \r\n", times);
times++;
sleep(1);
}
}
Compiler:
arm-linux-gnueabihf-gcc gdbtest.c -o gdbtest -g //编译测试程序,注意 -g选项
Copier dans le système de fichiers racine rootfs (après le démarrage de la carte de développement, utilisez le système de fichiers racine sous ubuntu via le service nfs):
sudo cp gdbtest /home/denghengli/linux/nfs/rootfs/lib/modules/4.1.15/
2. Dans la carte de développement, démarrez gdbserver et exécutez le fichier exécutable à déboguer
gdbserver 192.168.0.107:2000 gdbtest //启动开发板上的 gdbserver
192.168.0.107 est l'adresse IP de l'hôte ubuntu désignée
2000 est le port à ouvrir pour le débogage, qui peut être spécifié à volonté
gdbtest est un fichier exécutable pour le débogage, assurez-vous donc d'apporter le chemin de gdbtest! !
3. Ouvrez gdb dans ubuntu et connectez-vous à gdbserver sur la carte de développement
arm-linux-gnueabihf-gdb gdbtest //启动gdb调试
target remote 192.168.0.20:2000 //连接到开发板,192.168.0.20为开发板ip
Une fois la connexion réussie, il demandera le débogage à distance à l'aide de 192.168.0.20:2000
4. Déboguer via des commandes de débogage
Définissez le point d'arrêt sur la ligne 12, entrez c pour exécuter jusqu'au point d'arrêt, et le programme s'exécutera sur la carte de développement et imprimera les informations sur la console
Entrez p pour imprimer les informations de temps, et enfin entrez q pour quitter le débogage, et le gdbserver sur la carte de développement s'arrêtera également.
Quatre, commandes gdb couramment utilisées
1. Commande l (liste)
Répertoriez tous les codes source du programme; après la commande, tous les codes source du programme de débogage sont imprimés. Si le code source n'est pas imprimé, appuyez plusieurs fois sur la commande «l» ou appuyez sur la touche Entrée dans l'outil de débogage gdb pour répéter le précédent commander!
2. Commande b (break)
Utilisé pour définir un point d'arrêt, suivi d'une fonction ou d'un numéro de ligne spécifique
3. La commande c
Utilisé pour courir jusqu'au point d'arrêt
4. commande s
La commande s (étape) est exécutée en une seule étape, et cette fonction entrera dans la fonction.
5. commande n
La commande n (suivant) est également une opération en une seule étape, mais la commande n n'entrera pas dans la fonction.
6, commande p
La commande p (impression) est utilisée pour imprimer la valeur d'une variable.
7, commande q
La commande q (quit) est utilisée pour quitter le débogage, et le gdbserver sur la carte de développement s'arrêtera également.