Wie kann ich gdb in Vim integrieren?


52

Anstelle von gdbtuioder ctrl+xunter gdbdem der Quellcode oben auf dem Bildschirm angezeigt wird, möchte ich dies in meinem Vim-Editor sehen, der zwischen Registerkarten und Puffern entsprechend springt.

Wie kann ich das machen?


Nur als Referenz fand ich lldb plugin @ github.com/gilligan/vim-lldb und Screenshots sehen vielversprechend aus.
Name

BTW, weiß jemand etwas über Windbg? Vim-Integration hätte eine gute Idee sein können. Eigentlich denke ich das über fast jede Software, die es gibt.
Eyal Karni

Antworten:


33

Unter all den Plugins, die ich ausprobiert habe, war ConqueGDB der beste Ansatz. ConqueGDB verwendet Conque Shell , um eine interaktive Shell in vim einzubetten, die von GDB verwendet wird.

Der Workflow mit ConqueGDB besteht darin, keine GDB-Befehle auf dem GDB-Terminal einzugeben. Sie verwenden Verknüpfungen im vim-Quellcode. Sie können die GDB-Eingabeaufforderung jedoch weiterhin verwenden, um erweiterte Befehle zu erhalten, oder einen Bildlauf durchführen, um die gesamte Debug-Sitzung anzuzeigen.

Einige ConqueGDB-Standardzuordnungen, zum Beispiel:

  • leaderr : Lauf
  • leaderc : fortsetzen
  • leaders : Schritt
  • leaderp : Variable unter Cursor drucken

Beachten Sie, wie die vim-Cursorzeile zum Ausgeben einer GDB-Druckzeile verwendet wurde. Die aktuelle Codeausführung befindet sich in einer anderen Zeile (14), und in Zeile 10 befindet sich ein Haltepunkt.

vim mit CongueGDB

So installieren Sie beispielsweise mit Vundle:

Plugin 'vim-scripts/Conque-GDB'

Ich benutze diese Plugin-Optionen:

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  

Was bedeutet leaderdas?
In78

@ In78 Bedeutet, dass auf den meisten Computern die Taste <kbd> \ </ kbd> gedrückt wird. Zum Beispiel <leader>rbedeutet <kbd> \ </ kbd> + <kbd> r </ kbd> auf meinen Computern. Vim Handbuch hat einen Eintrag dafür::help leader
Parsa

Nicht zu vergessen , diese ConqueGDB Standardzuordnung: <Leader>b. Es setzt einen Haltepunkt an der Cursorposition. Es handelt sich jedoch NICHT um eine Umschaltfunktion, sodass Sie sie nicht zum erneuten Entfernen verwenden können. Stattdessen müssen Sie 'clear' in die GDB-Eingabeaufforderung schreiben.
Serup

Ich habe versucht, diese ConqueGdb zu verwenden, und um sie zum Laufen zu bringen, habe ich zuerst eine ausführbare Datei angegeben - und manchmal schlägt dies beim Festlegen von Bremspunkten fehl. Ich muss das GDB-Fenster fokussieren und I zum Einfügen drücken, bevor der Haltepunkt angezeigt wird normal für ConqueGdb?
Serup

11

Sie haben mehrere Plugins, die GDB integrieren.

  • Früher haben wir Rad gefahren . Das Projekt wurde nach Version 2.3 eingestellt. Das letzte Commit wurde 2016 gemacht. Für die Neugierigen gibt es immer noch einen Spiegel auf Github, in dem der Autor seine Arbeit archiviert hat. Anmerkung: pyclewn war der letzte Entwicklungsschritt der anderen Xavier Degaye * -Projekte.
  • vim-debugger , der mehrere andere debugger integriert
  • notEvils vim-debug , das als "Convenience-Ebene für den Fahrradfahrer dient, um einige Nachteile zu überwinden"

Und es gibt auch ein Plugin, das lldb integriert (aus dem LLVM-Projekt)

Es scheint, dass Bram derzeit (September 2017) dank der neuen :terminalFunktion an der Integration von gdb aus vim heraus arbeitet . Um es zu benutzen, müssen wir termdebugpacket (with :packadd termdebug) laden , dann können wir eine gdb-Konsole in einem vim-Fenster mit starten :TermDebug (+options). IMO, wir können davon ausgehen, dass dies die Zukunft der GDB-Integration unter Vim ist.


4
Gut - können Sie einen kurzen Überblick über jedes dieser Plugins geben?
muru

1
?? Links sind zu den offiziellen Seiten des Plugins. Ja, sie können sich ändern, wenn die Plugins verschwinden oder an einen anderen Ort verschoben werden. In diesem Fall aktualisiere ich die Nachricht im ersten Fall wie zuvor auf SO. Und im zweiten Fall würde dies bedeuten, dass ein Teil einer Nachricht, in der genau beschrieben wird, was das Plugin tut, veraltet ist. Im schlimmsten Fall: Wenn Sie angeben, was das Plugin wirklich tut, wird es veraltet, während der jeweilige Autor daran arbeitet, Funktionen hinzufügt und so weiter. Sowieso. Ich werde nächste Woche eine kurze Beschreibung hinzufügen ...
Luc Hermitte

2
@LucHermitte Der Beitrag wurde in die Überprüfungswarteschlange gestellt. Ich habe den genauen Text dieser Nachricht nicht selbst hinzugefügt, das System hat das für mich getan. In jedem Fall werden nur Link-Antworten auf SO- und den meisten, wenn nicht allen SE-Sites als "schlecht" eingestuft. Nicht nur, weil sie möglicherweise veraltet sind, sondern auch, weil sie die Dinge nicht wirklich erklären . Fast jede Frage könnte durch Verlinken auf die richtige (n) Dokumentationsseite (n) "beantwortet" werden, verdammt, Sie könnten sogar auf den Quellcode verlinken, aber erklärt das wirklich etwas? Ist das wirklich nützlich? Trägt das wirklich dazu bei, dass jemand Vim versteht?
Martin Tournoij

1
"Ich habe den genauen Text dieser Nachricht nicht selbst hinzugefügt, das System hat das für mich getan" . OKAY. Das erklärt die Nachricht, die ich ziemlich seltsam fand. Bezüglich Links. Ich verstehe die SO / SE-Richtlinien zu RTFM / SFTW. Im Gegensatz zu anderen Foren werden wiederkehrende / doppelte Fragen geschlossen, wenn sie erkannt werden, und SO / SE tendiert eher zu einem Wiki-Ansatz.
Luc Hermitte

3
Wo finde ich Plugins? Ich könnte ihre Dokumentation vervielfältigen. Aber es wird nicht viel helfen. Darüber hinaus ist es fast unmöglich, die Antwort auf dem neuesten Stand zu halten, wenn sich die Plugins weiterentwickeln. Das Hinzufügen einer nicht aktuellen Kurzzusammenfassung der Funktionen ist möglich, und ich werde mich darum kümmern. In jedem Fall ist ihre offizielle Seite der Einstiegspunkt. In Bezug auf Plugins ist dies die erste wichtige Information. In der Tat könnte uns eine nette Präsentation ansprechen ... Bis wir herausfinden, dass das Plugin in unserem speziellen Fall nicht funktionieren kann - was bei FSOSS häufig vorkommt. Hier ist auch eine Liste der verfügbaren Lösungen interessant.
Luc Hermitte

7

GDB- editBefehl

Öffnet einen Editor in der aktuellen Zeile mit dem Befehl:

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

Der Standard editorist ex, versteht aber vimauch das +<current-line>Format.

Wenn Sie den Editor verlassen, kehren Sie zurück in gdb.

Auf diese Weise können Sie die Quelle frei durchsuchen und sind besonders leistungsfähig, wenn Sie über eine ctagsIntegration verfügen .

Dies ist eine eingebaute Einweg-GDB für die VIM-Integration: Das wichtigste, was fehlt, ist das Setzen von Haltepunkten für VIM.

edit und zentrieren

editzentriert Vim nicht standardmäßig um die Quelle, daher habe ich ein Python-Skript erstellt, das dies ausführt : https://stackoverflow.com/questions/43557405/how-to-open-the-current-file-at-the- Aktuelle Zeile in einem Texteditor von GDB / 43557406 # 43557406

Haltepunktbefehl für den Zwischenablage-Helfer

Dieser vim-Befehl kopiert einen Haltepunkt-Bezeichner vom Typ:

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

in die Zwischenablage:

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

Dann können Sie das einfach einfügen gdb.

Dies ist das Ziel eines armen Mannes bei der Integration von GDB, um das Setzen von Haltepunkten zu vereinfachen.

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


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.