Si vous voulez acheter une voiture, il y a beaucoup de choix. Si vous voulez acheter un avion de ligne, il y a moins de choix. Si vous souhaitez utiliser le Large Hadron Collider, vous avez le choix entre un seul. Plus quelque chose est difficile à créer, moins il est probable qu’il y en ait beaucoup. Si vous recherchez un débogueur Linux, il n’y a que peu de choix, mais gdb est certainement celui que vous trouverez le plus souvent. Il existe lldb et une poignée d’offres commerciales non ouvertes, mais la plupart du temps, vous utiliserez gdb pour déboguer des logiciels sous Linux.
Bien sûr, tout le monde n’est pas fan de l’interface textuelle de gdb, il n’y a donc pas de pénurie d’interfaces disponibles pour cela. En fait, gdb a deux interfaces potentiellement intégrées bien que selon la façon dont vous installez gdb, vous pourriez ne pas avoir les deux. Bien sûr, si vous utilisez un IDE, il s’agit très probablement d’un frontal pour gdb, entre autres. Mais au cœur se trouve gdb et – généralement – il y a une fenêtre quelque part dans laquelle vous pouvez insérer des commandes gdb. Même emacs – qui pourrait être considéré comme l’IDE d’origine – peut exécuter gdb et vous offre une sorte d’expérience graphique.
Aucun frontal requis
Il fut un temps où Insight était populaire. Ce n’était pas une interface pour gdb. C’était une véritable copie de gdb avec une interface graphique Tk/Tcl intégrée. Il est tombé en disgrâce, cependant, à cause de problèmes d’emballage, quelque chose que mon vieil ami Jeff Duntemann a longuement couvert lorsque tout le monde l’a en quelque sorte abandonné.
Cependant, il existe toujours un moyen d’utiliser gdb un peu plus agréablement sans frontal. Le drapeau -tui. Cela ne vous donne pas une interface utilisateur graphique, mais une interface utilisateur textuelle comme celle que vous pouvez voir ci-dessous.
Bien que je ne sois pas toujours fan des interfaces graphiques, le débogage est un endroit où il est logique d’avoir beaucoup d’informations à la fois sur l’écran, c’est donc un endroit où j’essaierai souvent d’utiliser quelque chose d’un peu plus agréable qu’une simple commande ligne. La vue par défaut affiche simplement votre code source et la fenêtre de commande, mais vous pouvez également activer un affichage de registre, activer un affichage de désassemblage et modifier la disposition de tout. Essayez la commande « layout split » ou « layout regs » pour voir différents affichages. La commande « layout src » remettra les choses comme elles ont commencé. Si vous voulez vraiment utiliser le mode TUI, consultez la documentation. Il convient de noter que vous pouvez utiliser « tui enable » pour activer ce mode à tout moment et « tui disable » pour le désactiver et revenir à gdb ordinaire.
Pourquoi pas Internet ?
De nos jours, tout fonctionne dans un navigateur Web, alors pourquoi pas votre débogueur ? C’est exactement ce que fait le frontal gdbgui. Bien sûr, le débogueur ne s’exécute pas dans le navigateur, uniquement l’interface utilisateur qui se connecte à un serveur local. Vous pouvez voir le programme s’exécuter sur un exécutable ARM à l’aide de gdb-multiarch dans la figure ci-jointe.
Tous les frontaux, bien sûr, recherchent l’exécutable gdb normal. Mais si vous déboguez quelque chose à distance comme une puce AVR ou ARM, vous devrez trouver le moyen de pointer vers le bon programme gdb. Pour gdbgui, c’est l’option -g sur la ligne de commande. Il n’était pas évident de savoir s’il existait un moyen de se connecter au serveur (OpenOCD, dans ce cas) en utilisant le protocole distant étendu. Par défaut, au moins, il utilisait le protocole distant standard qui est moins performant.
Un autre choix similaire qui exécute l’interface dans le navigateur est gdbfrontend. Il faut également une option -g ou –gdb-executable pour définir un choix différent de programme gdb sous-jacent. Vous pouvez voir à quoi cela ressemble ci-dessous.
Comme gdbgui, il ne semble pas y avoir de moyen de configurer le frontal pour utiliser le protocole distant étendu, ce qui entraîne certaines limitations lors du débogage avec OpenOCD. Une fonctionnalité intéressante est le bouton de collaboration qui vous permet de dessiner sur l’écran, probablement lors du partage d’écran avec quelqu’un ou de la projection de votre écran pour une salle de classe.
Autres choix
Une autre option attrayante est Seer qui ne s’exécute pas dans un navigateur. Notez que ce n’est malheureusement pas la même chose que le package seer d’Ubuntu. Pour voir, vous devrez quitter la première boîte de dialogue pour apparaître et vous diriger vers Paramètres pour modifier l’exécutable gdb. Cependant, j’ai eu des problèmes pour définir des points d’arrêt dans l’interface graphique. Il semblait que les points d’arrêt fonctionneraient si vous utilisiez le terminal gdb, mais cela va à l’encontre de l’objectif. Il semble qu’il ait un « visualiseur de tableau » intéressant si vous pouvez le faire fonctionner. Je me suis contenté d’un coup de seer déboguant un programme Linux très simple et ça s’est bien passé.
Je soupçonne que tous ces programmes fonctionnent très bien en utilisant gdb normal sur un fichier Linux ELF standard. Tous les problèmes étaient sans doute dus au fait que j’utilisais OpenOCD comme gdbserver et que je parlais à une puce ARM distante, ce que les développeurs ne testent probablement pas très souvent. Même ainsi, les deux outils basés sur un navigateur ont pu faire le travail, même s’ils ont ignoré les fonctionnalités du protocole étendu.
Ça t’intéresse? Si vous utilisez un IDE qui intègre gdb, peut-être pas. Ou peut-être êtes-vous trop dur pour utiliser un débogueur. C’est très bien. Mais pour les moments où vous avez besoin de gdb, ces interfaces peuvent vous rendre plus productif et vous donner plus d’attention pour vous concentrer sur ce qui compte vraiment : trouver le bogue.
Honnêtement, si vous envisagez d’utiliser l’interface TUI, consultez le tableau de bord dont nous avons parlé plus tôt cette année. Si vous ne vous êtes pas familiarisé avec le débogage à distance de gdb, Maya Posch est là pour vous.