Comment puis-je intégrer GDB avec Vim?

52

Au lieu de gdbtuiou ctrl+xsous gdblequel affiche le code source en haut de l'écran, j'aimerais voir ceci dans mon éditeur Vim qui sauterait entre les onglets et les tampons en conséquence.

Comment puis-je faire ceci?

Nom
la source
Juste pour référence, j'ai trouvé le plugin lldb @ github.com/gilligan/vim-lldb et les captures d'écran semblent prometteuses.
nommer
BTW, quelqu'un sait quelque chose sur Windbg? L'intégration de Vim aurait pu être une bonne idée. Bien que, en fait, je pense que cela concerne presque tous les logiciels existants.
eyal karni

Réponses:

33

Parmi tous les plugins que j'ai essayés, j'ai trouvé que ConqueGDB était la meilleure approche. ConqueGDB utilise Conque Shell pour incorporer un shell interactif dans vim, utilisé par GDB.

Le flux de travail avec ConqueGDB consiste à ne pas entrer de commandes GDB sur le terminal GDB, vous utilisez des raccourcis sur le code source vim. Mais vous pouvez continuer à utiliser l'invite GDB si vous le souhaitez, pour des commandes plus avancées, ou faire défiler pour voir la totalité de la session de débogage.

Certains mappages par défaut de ConqueGDB, par exemple:

  • leaderr : courir
  • leaderc : Continuez
  • leaders : étape
  • leaderp : imprimer la variable sous le curseur

Remarquez comment la ligne du curseur vim a été utilisée pour émettre une 'ligne d'impression' dans la base de données, l'exécution du code en cours est dans une autre ligne (14) et un point d'arrêt est indiqué à la ligne 10.

vim avec CongueGDB

Pour installer avec Vundle par exemple:

Plugin 'vim-scripts/Conque-GDB'

J'utilise ces options de plugin:

let g:ConqueTerm_Color = 2         " 1: strip color after 200 lines, 2: always with color
let g:ConqueTerm_CloseOnEnd = 1    " close conque when program ends running
let g:ConqueTerm_StartMessages = 0 " display warning messages if conqueTerm is configured incorrectly  
Viccuad
la source
que veut leaderdire
In78
@ In78 Cela signifie la clé <kbd> \ </ kbd> sur la plupart des ordinateurs. Par exemple <leader>rsignifie <kbd> \ </ kbd> + <kbd> r </ kbd> sur mes ordinateurs. Le manuel de Vim a une entrée pour cela::help leader
Parsa
Sans oublier ce mappage par défaut ConqueGDB: <Leader>b. Il définit un point d'arrêt à la position du curseur. Cependant, ce n'est PAS une bascule, vous ne pouvez donc pas l'utiliser pour la supprimer. Au lieu de cela, vous devrez écrire "clear" sur l'invite de la base de données.
Serup
J'ai essayé d'utiliser ce ConqueGdb et pour le faire fonctionner, j'ai d'abord spécifié un fichier exécutable - et parfois il échoue avec la définition de points frekep - je dois focaliser la fenêtre gdb et appuyer sur I pour l'insertion, avant que le point d'arrêt ne s'affiche normal pour ConqueGdb?
Serup
11

Vous avez plusieurs plugins qui intègrent gdb.

  • Nous avions l'habitude d'avoir pyclewn . Le projet a été interrompu après la version 2.3. Le dernier engagement a été fait en 2016. Pour les plus curieux, il existe encore un miroir sur github où son auteur a archivé son travail. Remarque: pyclewn constituait la dernière étape de l'évolution des autres projets de Xavier Degaye *.
  • vim-debugger , qui intègre plusieurs autres débogueurs
  • vim-debug de notEvil , qui agit comme une "couche de commodité permettant à Pyclewn de surmonter certains inconvénients"

Et il y a aussi un plugin qui intègre lldb (du projet LLVM)

Il semble que Bram travaille actuellement (septembre 2017) sur l'intégration de gdb à l'intérieur de vim grâce à la nouvelle :terminalfonctionnalité. Pour l'utiliser, nous devons charger termdebugpacket (avec :packadd termdebug), puis nous pourrons démarrer une console gdb dans une fenêtre vim avec :TermDebug (+options). OMI, on peut considérer que c'est l'avenir de l'intégration de la GDB sous Vim.

Luc Hermitte
la source
4
Bien - pouvez-vous donner un bref aperçu de chacun de ces plugins?
muru
1
?? Les liens sont vers les pages officielles des plugins. Oui, ils peuvent changer si les plugins disparaissent ou s'ils sont déplacés ailleurs. Dans ce cas, je mettrai à jour le message dans le premier cas, comme je l'ai déjà fait avec SO. Et dans le second cas, cela signifierait qu'une partie de tout message détaillant le fonctionnement du plug-in deviendrait obsolète. Pire scénario: détailler ce que fait réellement le plugin deviendra obsolète pendant que leur auteur respectif travaille dessus, ajoute des fonctionnalités, etc. En tous cas. Je vais en ajouter une brève description la semaine prochaine ...
Luc Hermitte
2
@LucHermitte Le message est apparu dans la file d'attente des critiques; Je n'ai pas ajouté le texte exact de ce message moi-même, le système l'a fait pour moi. Dans tous les cas, les réponses ne contenant que des liens sont considérées comme "mauvaises" sur les sites SO et la plupart, sinon tous, des sites SE. Non seulement parce qu'ils peuvent sortir de ce jour, mais aussi parce qu'ils ne sont pas vraiment expliquer les choses; presque toutes les questions peuvent être "résolues" en se connectant à la (aux) page (s) de documentation appropriée. Bon sang, vous pouvez même créer un lien vers le code source, mais cela explique- t-il vraiment quelque chose? Est-ce vraiment utile? Est-ce que cela contribue vraiment à la compréhension de Vim par quelqu'un?
Martin Tournoij
1
"Je n'ai pas ajouté le texte exact de ce message moi-même, le système l'a fait pour moi" . D'ACCORD. Cela explique le message, que j'ai trouvé assez étrange. En ce qui concerne les liens. Je comprends la politique SO / SE sur RTFM / SFTW. Contrairement aux autres forums, les questions récurrentes / en double sont fermées lorsqu'elles sont détectées, et SO / SE tend davantage vers une approche wiki.
Luc Hermitte
3
En ce qui concerne où trouver des plugins. Je pourrais dupliquer leur documentation. Mais ça ne va pas aider beaucoup. De plus, il est presque impossible de garder la réponse à jour à mesure que les plugins évoluent. Il est possible d'ajouter un bref résumé non à jour des fonctionnalités, et je vais m'en occuper. Dans tous les cas, leur page officielle est le point d'entrée. En ce qui concerne les plugins, il s’agit de la première information importante. En effet, une belle présentation pourrait nous intéresser ... Jusqu'à ce que nous découvrions que le plugin ne peut pas fonctionner dans notre cas particulier - ce qui arrive souvent avec FSOSS. C’est là qu’une liste de solutions disponibles est également intéressante.
Luc Hermitte
7

editCommande GDB

Ouvre un éditeur sur la ligne en cours en utilisant la commande:

$EDITOR +<current-line> <current-file>

La valeur par défaut editorest ex, mais vimcomprend également le +<current-line>format.

Lorsque vous quittez l'éditeur, vous revenez dans gdb.

Cela vous permet de parcourir la source librement et est particulièrement puissant si vous avez une ctagsintégration.

Il s'agit d'une intégration gdb à vim à sens unique pour un homme pauvre: la principale chose qui manque est la définition de points d'arrêt à partir de Vim.

edit et centre

editne centre pas Vim par défaut autour de la source, j'ai donc créé un script Python qui le fait: https://stackoverflow.com/questions/43557405/how-to-open-the-current-file-at-the- current-line-in-a-text-editor-from-gdb / 43557406 # 43557406

Commande de point d'arrêt à l'aide du presse-papier

Cette commande vim copie un spécificateur de point d'arrêt de type:

b <file-path>:<line-number>

dans le presse-papier:

command! Xg :let @+ = 'b ' . expand('%:p') . ':' . line('.')

Ensuite, vous pouvez simplement coller cela dans gdb.

Il s’agit d’une intégration vim à gdb d’un pauvre pour faciliter l’établissement de points de rupture.

Voir aussi: https://stackoverflow.com/questions/3536600/do-you-debug-c-code-in-vim-how

Ciro Santilli 改造 中心 六四 事件
la source
3

Bien que pas techniquement vim. cgdb est une version maléfique de gdb avec des liaisons de clé similaires à vim. C'est mon débogueur de goto depuis des années:

https://cgdb.github.io/

Ericcurtin
la source