Como posso integrar o gdb ao Vim?

52

Em vez de gdbtuiou ctrl+xsob o gdbqual mostra o código fonte na parte superior da tela, eu gostaria de ver isso no meu editor Vim, que saltaria entre as guias e os buffers de acordo.

Como posso fazer isso?

nome
fonte
Apenas para referência, achei o plugin lldb @ github.com/gilligan/vim-lldb e as capturas de tela parecem promissoras.
Nome
BTW, alguém sabe algo sobre windbg? A integração do Vim poderia ter sido uma boa ideia. Embora, na verdade, eu acho isso sobre quase todos os softwares existentes.
eyal karni

Respostas:

33

Entre todos os plugins que experimentei, achei o ConqueGDB a melhor abordagem. O ConqueGDB usa o Conque Shell para incorporar um shell interativo no vim, usado pelo GDB.

O fluxo de trabalho com o ConqueGDB consiste em não inserir comandos GDB no terminal GDB, você usa atalhos no código-fonte do vim. Mas você pode continuar usando o prompt do GDB, se desejar, para obter comandos mais avançados ou rolar para ver a sessão de depuração inteira.

Alguns mapeamentos padrão do ConqueGDB, por exemplo:

  • leaderr : corre
  • leaderc : continuar
  • leaders : degrau
  • leaderp : imprime variável sob o cursor

Observe como a linha do cursor vim foi usada para emitir uma 'linha de impressão' do GDB, a execução atual do código está em outra linha (14) e há um ponto de interrupção na linha 10.

vim com CongueGDB

Para instalar com o Vundle, por exemplo:

Plugin 'vim-scripts/Conque-GDB'

Eu uso estas opções de plug-in:

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
fonte
o que leadersignifica
In78 30/03
@ In78 Significa a chave <kbd> \ </kbd> na maioria dos computadores. Por exemplo, <leader>rsignifica <kbd> \ </kbd> + <kbd> r </kbd> nos meus computadores. Manual Vim tem uma entrada para ele::help leader
Parsa
Não esquecer esse mapeamento padrão ConqueGDB: <Leader>b. Ele define um ponto de interrupção na posição do cursor. No entanto, NÃO é uma alternância, portanto você não pode usá-lo para removê-lo novamente. Em vez disso, você precisará escrever 'clear' no prompt do GDB.
serup 29/09/16
Eu tentei usar este ConqueGdb e, para fazê-lo funcionar, primeiro especifiquei o arquivo executável - e às vezes falha na definição dos pontos de freio - tenho que focar a janela do gdb e pressionar I para inserir, antes que o ponto de interrupção apareça - é este normal para ConqueGdb?
serup 18/11/16
11

Você tem vários plugins que integram o gdb.

  • Nós costumávamos ter pyclewn . O projeto foi descontinuado após a versão 2.3. O último commit foi realizado em 2016. Para os curiosos, ainda existe um espelho no github, onde o autor arquivou seu trabalho. Nota: o pyclewn costumava ser a última etapa da evolução dos outros projetos * clewn de Xavier Degaye.
  • depurador vim , que integra vários outros depuradores
  • O vim-debug do notEvil , que atua como "camada de conveniência para o pyclewn superar algumas desvantagens"

E também há um plugin que integra lldb (do projeto LLVM)

Parece que Bram está atualmente (setembro de 2017) trabalhando na integração do gdb a partir do vim, graças ao novo :terminalrecurso. Para usá-lo, precisamos carregar o termdebugpacote (com :packadd termdebug), então poderemos iniciar um console gdb em uma janela do vim com :TermDebug (+options). Na IMO, podemos considerar o futuro da integração do GDB no Vim.

Luc Hermitte
fonte
4
Bom - você pode dar uma breve visão geral de cada um desses plugins?
muru
11
?? Os links são para as páginas oficiais dos plugins. Sim, eles podem mudar se os plug-ins desaparecerem ou se forem movidos para outro lugar. Nesse caso, atualizarei a mensagem no primeiro caso, como fiz anteriormente no SO. E no segundo caso, isso significaria que parte de qualquer mensagem que detalha o que o plug-in faz ficará obsoleta. Pior cenário: detalhar o que o plug-in realmente faz ficará obsoleto enquanto o respectivo autor trabalhar neles, adicionar recursos e assim por diante. De qualquer forma. Vou adicionar uma breve descrição deles na próxima semana ...
Luc Hermitte 20/02
2
@LucHermitte A publicação surgiu na fila de revisão; Eu não adicionei o texto exato desta mensagem, o sistema fez isso por mim. De qualquer forma, as respostas apenas ao link são consideradas "ruins" no SO e na maioria dos sites, se não todos, no SE. Não apenas porque eles podem ficar desatualizados, mas também porque eles realmente não explicam as coisas; quase qualquer pergunta poderia ser "respondida" vinculando-se à (s) página (s) da documentação correta, diabos, você poderia até vincular o código-fonte, mas isso realmente explica alguma coisa? Isso é realmente útil? Isso realmente contribui para o entendimento de alguém sobre o Vim?
Martin Tournoij
11
"Eu não adicionei o texto exato desta mensagem, o sistema fez isso por mim" . ESTÁ BEM. Isso explica a mensagem, que eu achei bastante estranha. Em relação aos links. Entendo a política SO / SE sobre RTFM / SFTW. Diferentemente de outros fóruns, perguntas recorrentes / duplicadas são fechadas quando detectadas, e o SO / SE tende mais a uma abordagem wiki.
Luc Hermitte
3
Sobre onde encontrar plugins. Eu poderia duplicar a documentação deles. Mas não vai ajudar muito. Além disso, é quase impossível manter a resposta atualizada à medida que os plugins evoluem. É possível adicionar um breve resumo não atualizado dos recursos, e eu cuidarei disso. De qualquer forma, sua página oficial é o ponto de entrada. Em relação aos plugins, esta é a primeira informação importante. De fato, uma boa apresentação pode nos atrair ... Até descobrirmos que o plug-in não pode funcionar em nosso caso específico - o que acontece frequentemente com o FSOSS. É aqui que uma lista de soluções disponíveis também é interessante.
Luc Hermitte 21/02
7

editComando GDB

Abre um editor na linha atual usando o comando:

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

O padrão editoré ex, mas vimtambém entende o +<current-line>formato.

Ao sair do editor, você volta ao gdb.

Isso permite que você navegue livremente na fonte e é especialmente poderoso se você tiver ctagsintegração.

Essa é a integração do gdb para o vim de um pobre homem: a principal coisa que falta é definir pontos de interrupção no Vim.

edit e centro

editnão centraliza o Vim por padrão na fonte, por isso criei um script Python que o faz: https://stackoverflow.com/questions/43557405/how-to-open-the-current-file-at-the- linha-atual-em-um-editor-de-texto-do-gdb / 43557406 # 43557406

Comando do ponto de interrupção para o auxiliar da área de transferência

Este comando vim copia um especificador de ponto de interrupção do tipo:

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

para a área de transferência:

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

Então você pode simplesmente colar isso gdb.

Este é o ponto fraco da integração com o gdb para facilitar a definição de pontos de interrupção.

Consulte também: https://stackoverflow.com/questions/3536600/do-you-debug-c-code-in-vim-how

Ciro Santilli adicionou uma nova foto
fonte
3

Embora não seja tecnicamente vim. O cgdb é uma versão maldita do gdb com atalhos de teclado parecidos com o vim. Tem sido meu depurador Goto por anos:

https://cgdb.github.io/

ericcurtina
fonte