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?


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  

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.


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


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.