vue fractionnée gdb avec code


111

Je venais juste de déboguer un programme dans gdb et j'ai trouvé une nouvelle fonctionnalité que je n'avais jamais vue ni même entendue auparavant, une vue fractionnée où je peux voir et parcourir le code en plus de donner des commandes:

Désolé pour l'image, mais ttys n'a pas de captures d'écran.

Qu'est-ce que c'est? Qu'est-ce que j'ai fait ou, plus précisément, comment puis-je obtenir à nouveau ce mode d'écran partagé? Y a-t-il un nom pour ce mode, ou un endroit où je peux lire comment l'utiliser?


2
Pour une référence rapide: vous pouvez quitter ce mode en utilisant l'un des Cx Ca, Cx a ou Cx A.` Voir cette question .
Richard

Réponses:


95

Ça s'appelle le TUI (sans blague). Commencez par exemple avec gdbtuiou gdb -tui...


11
vous pouvez également utiliser layout nextaprès avoir commencé gdbnormalement
khaverim

87

Vous pouvez le déclencher dynamiquement par push ctrl+ xet ctrl+ a.


merci @ user146043, cela semble le seul moyen si vous exécutez screen en même temps que ctrl-a est le moyen d'initier les commandes d'écran!
olik79

On dirait que vous pouvez aussi fermer avec ce combo!
Nick Desaulniers le


16

Vous pouvez également le démarrer à partir du shell gdb en utilisant la commande "-" (tiret). Je ne sais pas comment le désactiver dynamiquement.


Cela semble être le plus facile à utiliser et à retenir.
Siyuan Ren

2
Vous pouvez quitter en effectuant l'une des opérations Cx Ca, Cx a ou Cx A. Voir stackoverflow.com/questions/14147117
...

15

Tableau de bord GDB

https://github.com/cyrus-and/gdb-dashboard

Le tableau de bord GDB utilise l' API GDB Python officielle et imprime les informations que vous souhaitez lorsque GDB s'arrête, par exemple après un next, comme la displaycommande native .

Vs TUI:

  • plus robuste, car il imprime simplement sur stdout au lieu de mettre le shell sur un état de malédictions plus magiques, par exemple:

  • hautement configurable à partir de Python: vous pouvez sélectionner ce que vous voulez sortir et la taille de chaque section en fonction de ce que vous déboguez.

    Les vues les plus utiles sont déjà implémentées: source, assemblage, registres, pile, mémoire, threads, expressions ... mais il devrait être facile de l'étendre avec toutes les informations exposées sur l'API GDB Python.

    TUI ne permet d'afficher que deux des sources, l'assemblage et les registres et c'est tout. A moins que vous ne vouliez modifier son code source C bien sûr ;-)

entrez la description de l'image ici

Je pense que GDB devrait être livré avec une configuration comme celle-ci prête à l'emploi et activée par défaut, cela attirerait beaucoup plus d'utilisateurs de cette façon.

Oh, et le développeur principal, Andrea Cardaci , a été très réactif et génial. Bravo.

Voir aussi: Comment mettre en évidence et colorer la sortie gdb pendant le débogage interactif?


2
Il n'y a pas assez de mots pour décrire à quel point c'est génial. Merci :)
unresolved_external

11

Tapez layoutcomme une commande dans gdb et la fenêtre fractionnée sera affichée.


5

Lorsque GDB est en mode standard, l'utilisation winpassera automatiquement en mode TUI.
Autre commande pour le mode TUI:

  • info win
    Liste et donne la taille de toutes les fenêtres affichées.
  • focus next | prev | src | asm | regs | split
    Définissez le focus sur la fenêtre nommée. Cette commande permet de changer la fenêtre active afin que les touches de défilement puissent être affectées à une autre fenêtre.

Lisez ici pour plus d'aide.


2

Il existe également un outil d'interface pour GDB appelé cgdb. Même avec un peu de mise en évidence des couleurs. "ESC" pour passer à la vue code, "i" pour revenir à gdb

cgdb


1

Le mode tui a été clairement inspiré par emacs - je l'ai découvert par accident quand j'ai frappé ^ Xo, qui bascule entre les fenêtres fractionnées dans emacs - je le frappe parfois distraitement quand ce que je devrais faire est de passer à un programme différent. Quoi qu'il en soit, cela conduit à une autre fonctionnalité non encore mentionnée, que vous pouvez déplacer le curseur de la fenêtre de code (où vous pouvez faire défiler) vers la ligne de commande, ou vice versa, avec ^ Xo.


De toute évidence, la plupart des programmes de GNU ont des emacs comme les raccourcis clavier, principalement pour des raisons de cohérence. Je sais qu'il existe un mode vi dans bash, mais ce n'est pas assez bon que le mode emacs.
klaus
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.