Come posso integrare gdb con Vim?


52

Invece di gdbtuio ctrl+xsotto il gdbquale mostra il codice sorgente nella parte superiore dello schermo, vorrei vedere questo nel mio editor Vim che salta tra le schede e i buffer di conseguenza.

Come posso fare questo?


Solo per riferimento ho trovato il plugin lldb @ github.com/gilligan/vim-lldb e gli screenshot sembrano promettenti.
nome

A proposito, qualcuno sa qualcosa su windbg? L'integrazione di Vim avrebbe potuto essere una buona idea. Anche se, in realtà, penso a quasi tutti i software che ci siano.
eyal karni,

Risposte:


33

Tra tutti i plugin che ho provato, ho trovato ConqueGDB l'approccio migliore. ConqueGDB utilizza Conque Shell per incorporare una shell interattiva all'interno di vim, utilizzata da GDB.

Il flusso di lavoro con ConqueGDB consiste nel non immettere comandi GDB sul terminale GDB, si utilizzano scorciatoie sul codice sorgente di VIM. Ma puoi continuare a usare il prompt GDB se vuoi, per comandi più avanzati, oppure scorrere per vedere l'intera sessione di debug.

Alcuni mapping predefiniti di ConqueGDB, ad esempio:

  • leaderr : correre
  • leaderc : Continua
  • leaders : step
  • leaderp : stampa la variabile sotto il cursore

Notare come la linea del cursore vim è stata utilizzata per emettere una "riga di stampa" GDB, l'esecuzione corrente del codice è in un'altra riga (14) e c'è un punto di interruzione sulla riga 10.

vim con CongueGDB

Per installare con Vundle per esempio:

Plugin 'vim-scripts/Conque-GDB'

Uso queste opzioni di 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  

cosa leadersignifica?
In78,

@ In78 Indica la chiave <kbd> \ </kbd> sulla maggior parte dei computer. Ad esempio <leader>rsignifica <kbd> \ </kbd> + <kbd> r </kbd> sui miei computer. Il manuale di Vim ha una voce per questo::help leader
Parsa,

Per non dimenticare questa mappatura predefinita ConqueGDB: <Leader>b. Imposta un punto di interruzione nella posizione del cursore. Tuttavia, NON è un interruttore, quindi non è possibile utilizzarlo per rimuoverlo di nuovo. Piuttosto, dovrai scrivere 'clear' sul prompt GDB.
serup,

Ho provato a usare questo ConqueGdb e per farlo funzionare ho prima specificato il file eseguibile - e talvolta non riesce con l'impostazione dei punti di frenatura - Devo focalizzare la finestra di gdb e premere I per inserire, prima che appaia il punto di interruzione - è questo normale per ConqueGdb?
serup,

11

Hai diversi plugin che integrano gdb.

  • Avevamo una bicicletta . Il progetto è stato sospeso dopo la versione 2.3. L'ultima commessa è stata fatta nel 2016. Per i curiosi c'è ancora uno specchio su github in cui il suo autore ha archiviato il suo lavoro. Nota: pyclewn era l'ultima tappa dell'evoluzione degli altri progetti di clewn di Xavier Degaye.
  • vim-debugger , che integra molti altri debugger
  • vim-debug di notEvil , che funge da "livello di convenienza per pyclewn per superare alcuni inconvenienti"

E c'è anche un plugin che integra lldb (dal progetto LLVM)

Sembra che Bram stia attualmente lavorando (settembre 2017) all'integrazione di gdb all'interno di VIM grazie alla nuova :terminalfunzionalità. Per usarlo, dobbiamo caricare il termdebugpacchetto (con :packadd termdebug), quindi saremo in grado di avviare una console gdb in una finestra di VIM con :TermDebug (+options). IMO, possiamo considerarlo il futuro dell'integrazione GDB sotto Vim.


4
Bene, puoi fornire una breve panoramica di ciascuno di questi plugin?
Muru,

1
?? I collegamenti sono alle pagine ufficiali dei plugin. Sì, possono cambiare se i plugin scompaiono o se vengono spostati altrove. In tal caso, aggiornerò il messaggio nel primo caso come ho fatto prima su SO. E nel secondo caso, significherebbe che quella parte di qualsiasi messaggio che dettaglia ciò che fa il plugin diventerebbe obsoleta. Scenario peggiore: dettagliare ciò che fa realmente il plugin diventerà obsoleto mentre i rispettivi autori lavorano su di essi, aggiungono funzionalità e così via. Comunque. Aggiungerò una breve descrizione di loro la prossima settimana ...
Luc Hermitte,

2
@LucHermitte Il post è arrivato nella coda delle recensioni; Non ho aggiunto da solo il testo esatto di questo messaggio, il sistema l'ha fatto per me. In ogni caso, solo le risposte ai link sono considerate "cattive" su SO e la maggior parte dei siti SE, se non tutti. Non solo perché potrebbero non essere aggiornati, ma anche perché non spiegano davvero le cose; quasi ogni domanda potrebbe essere "risolta" collegandosi alla / e pagina / e corretta / e della documentazione, diavolo, potresti persino collegarti al codice sorgente, ma questo spiega davvero qualcosa? È davvero utile? Ciò contribuisce davvero alla comprensione di qualcuno di Vim?
Martin Tournoij,

1
"Non ho aggiunto il testo esatto di questo messaggio, il sistema ha fatto questo per me" . OK. Questo spiega il messaggio, che ho trovato abbastanza strano. Per quanto riguarda i collegamenti. Comprendo la politica SO / SE su RTFM / SFTW. A differenza di altri forum, le domande ricorrenti / duplicate vengono chiuse quando rilevate e SO / SE tende maggiormente verso un approccio wiki.
Luc Hermitte,

3
Per quanto riguarda dove trovare plugin. Potrei duplicare la loro documentazione. Ma non aiuterà molto. Inoltre, è quasi impossibile mantenere la risposta aggiornata man mano che i plugin si evolvono. È possibile aggiungere un breve riepilogo non aggiornato delle funzionalità, e ci penserò. In ogni caso, la loro pagina ufficiale è il punto di ingresso. Per quanto riguarda i plugin, questa è la prima informazione importante. In effetti, una bella presentazione potrebbe fare appello a noi ... Fino a quando non scopriremo che il plugin non può funzionare nel nostro caso particolare, cosa che accade spesso con FSOSS. Qui è anche interessante un elenco di soluzioni disponibili.
Luc Hermitte,

7

editComando GDB

Apre un editor sulla riga corrente usando il comando:

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

L'impostazione predefinita editorè ex, ma vimcomprende anche il +<current-line>formato.

Quando esci dall'editor, torni indietro gdb.

Ciò consente di navigare liberamente nella fonte ed è particolarmente potente se si dispone di ctagsintegrazione.

Questo è un gdb unidirezionale incorporato per un uomo povero per vim l'integrazione: la cosa principale mancante è impostare punti di interruzione da Vim.

edit e al centro

editnon centra Vim per impostazione predefinita attorno alla fonte, quindi ho creato uno script Python che lo fa: https://stackoverflow.com/questions/43557405/how-to-open-the-current-file-at-the- corrente-line-in-a-editor di testo-da-gdb / 43557406 # 43557406

Comando di breakpoint nell'helper degli appunti

Questo comando vim copia un identificatore di breakpoint di tipo:

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

negli appunti:

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

Quindi puoi semplicemente incollarlo in gdb.

Questa è la vim di un uomo povero per l'integrazione con gdb per facilitare l'impostazione dei punti di interruzione.

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


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.