2016-12-05-miniatureAprès avoir réalisé une chaîne de compilation en C pour le Rasberry Pi sous ArchLinux il y a deux semaines, je vous invite à explorer la cross-compilation C++ sous Debian avec un IDE dédié. Cela me permettra de créer et compiler des programmes directement sur le Raspberry Pi.
On verra également comment on peut déboguer le programme à distance sur le Raspberry Pi. Nous aurons ainsi un environnement de développement dédié à la configuration et à la création de programme sur notre système embarqué 🙂

Cette troisième et dernière partie concernera le débogage du programme embarqué grâce à Eclipse !

 

Prérequis

Toutes les étapes précédent ce tuto ont été effectués dans les deux premières parties du tuto :
– Réaliser son environnement de développement C++ pour Raspberry Pi [PARTIE 1/3]
– Réaliser son environnement de développement C++ pour Raspberry Pi [PARTIE 2/3]

6. Débuguer son programme directement sur cible

Pour débuguer un programme à distance à partir d’un IDE nous avons besoin d’un client/serveur de débogage. Pour se faire, on doit installer gdbserver sur le Raspberry Pi.

sudo apt-get install gdbserver

 

Vraiment pratique cette petite console intégrée à Eclipse ! x)

Vraiment pratique cette petite console intégrée à Eclipse ! x)

Ensuite, sur le PC de développement, on installe le client multi-architecture :

sudo apt-get install gdb-multiarch

 

2016-11-05-chapitre_6-2

Ensuite, on crée dans le workspace d’Eclipse le fichier .gdbinit (nano .gdbinit) qui contient :

set architecture arm

 

nano.. LA BASE !

nano.. LA BASE !

Le fichier .gdbinit

Le fichier .gdbinit

On retourne sur Eclipse, dans « Debug Configurations » et on supprime la configuration TestRPi locale. On en crée une nouvelle dans « C/C++ Remote Application ».

Oui, oui, on supprime. C'est pas une simple application, c'est une "Remote" application !

Oui, oui, on supprime. C’est pas une simple application, c’est une “Remote” application !

On spécifie bien la connexion avec le Raspberry Pi :

Mon IP n'est pas forcément ton IP ^-^

Mon IP n’est pas forcément ton IP ^-^

La connexion s’effectue avec une clé ssh (tu sais, celle qu’on a installé t’al’heure ?)

Ne pas oublier où se trouve le programme.. Ça serait bête !

Ne pas oublier où se trouve le programme.. Ça serait bête !

On n’oublie pas de rajouter l’emplacement du programme sur la cible : pour ma part se sera /home/pi/TestRPi_1.

Comme debugger, on utilisera gdb-multiarch, et non gdb. On remplit donc les champs « GDB debugger » et « GDB command file » avec :

/usr/bin/gdb-multiarch
/home/nom_utilisateur/workspace/.gdbinit

 

Très important !!!

Très important !!!

On applique et on lance le Debug :

Un message vous informant que vous lancez un programme en Debug et qu’il sera suspendu en début de programme car aucun point d’arrêt n’a été spécifié. Cliquez sur oui.

Un message vous informant que vous lancez un programme en Debug et qu’il sera suspendu en début de programme car aucun point d’arrêt n’a été spécifié. Cliquez sur oui.

Mode Debug activé !

Mode Debug activé !

Bon, c’est bien beau, mais sans variable, il n’y a pas grand-chose à voir… Je modifie un peu le programme en ajoutant une variable « x » que j’incrémente.

Humm.. le programme se complexifie !

Humm.. le programme se complexifie !

Je n’oublie pas d’enregistrer et je lance le Debug grâce à l’icône en forme de puce.

Grâce au pas à pas (F6), on voit la variable x s’initialiser à 0, puis s’égaliser à 26, puis s’incrémenter à 27. Le tout en Debug à distance sur la cible.

2016-11-05-chapitre_6-13

2016-11-05-chapitre_6-14

Jusque-là tout fonctionne très bien !

Jusque-là tout fonctionne très bien !

A la fin du programme, le débuggeur d’Eclipse nous lâche des erreurs, car Eclipse ne comprends pas la terminaison du programme cible. Le débuggeur a besoin des librairies linux-arm-gnueabihf pour comprendre cela.

Plein de rouge partout ! Erf !

Plein de rouge partout ! Erf !

Pour se faire, on se rends dans Debug Configurations => C/C++ Remote Application => Nom_du_Programme => Debugger => Shared Librairies. Et on ajoute nos librairies /usr/lib/arm-linux-gnueabihf.

On rajoute nos libs ! :-)

On rajoute nos libs ! 🙂

On enregistre et on relance le Debug…

Le debug s’exécute parfaitement, couleurs en prime !

Le debug s’exécute parfaitement, couleurs en prime !

La terminaison du programme est communiquée, GDBserver réponds à merveille !

La terminaison du programme est communiquée, GDBserver réponds à merveille !

Conclusion

Et voilà la fin de cet article, qui est à ce jour, le premier article entièrement en français expliquant comment compiler des programmes en C++ directement sur le Raspberry Pi à travers un réseau local ! : -)

Une fois le projet Eclipse paramétré, le gain de temps à la compilation, aux tests et au débogage n’est pas négligeable ! Pour ma part, je peux enfin me lancer sereinement dans la création d’un programme permettant de piloter le PiRobot !

Ressources :

HackADay – Code Craft : Cross Compiling for the Raspberry Pi

Debian Wiki – CrossToolchains

MS-Cheminformatics

Debian Wiki – Multiarch

Eclipse Community Forums

BenTeK.

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Recevez les bons outils pour débuter dans l'univers DIY et l'impression 3D !