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?

Kevin
la source
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...

0xC0000022L
la source
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.

POHAN WU
la source
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.

Neowizard
la source
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?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
la source
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.

Alfred
la source
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.

girardengo
la source
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

user3042599
la source
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.

Goutte
la source
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