Jak mogę zintegrować gdb z Vimem?

52

Zamiast gdbtuilub ctrl+xpod gdbktórym pokazuje kod źródłowy na górze ekranu, chciałbym zobaczyć to w moim edytorze Vima, który przeskakiwałby między kartami i buforami odpowiednio.

Jak mogę to zrobić?

imię
źródło
Dla porównania znalazłem wtyczkę lldb @ github.com/gilligan/vim-lldb, a zrzuty ekranu wyglądają obiecująco.
nazwij
BTW, ktoś wie coś o windbg? Integracja z Vimem mogłaby być dobrym pomysłem. Chociaż tak naprawdę myślę o tym w prawie każdym oprogramowaniu.
eyal karni

Odpowiedzi:

33

Spośród wszystkich wtyczek, które wypróbowałem, ConqueGDB jest najlepszym podejściem. ConqueGDB używa Conque Shell do osadzenia interaktywnej powłoki w vimie, używanej przez GDB.

Przepływ pracy z ConqueGDB nie polega na wpisywaniu poleceń GDB na terminalu GDB, używasz skrótów na kodzie źródłowym vim. Możesz jednak nadal używać wiersza polecenia GDB, aby uzyskać bardziej zaawansowane polecenia, lub przewinąć, aby wyświetlić całą sesję debugowania.

Niektóre domyślne odwzorowania ConqueGDB, na przykład:

  • leaderr : biegać
  • leaderc : dalej
  • leaders : krok
  • leaderp : drukuj zmienną pod kursorem

Zauważ, jak linia kursora vima została użyta do wydania „wiersza wydruku” GDB, bieżące wykonanie kodu znajduje się w innej linii (14), aw linii 10 jest punkt przerwania.

vim z CongueGDB

Aby na przykład zainstalować za pomocą Vundle:

Plugin 'vim-scripts/Conque-GDB'

Korzystam z tych opcji wtyczek:

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
źródło
co leaderznaczy
In78
@ In78 Oznacza to klawisz <kbd> \ </kbd> na większości komputerów. Na przykład <leader>roznacza <kbd> \ </kbd> + <kbd> r </kbd> na moich komputerach. Podręcznik Vima ma na to wpis::help leader
Parsa,
Nie zapomnieć tego domyślnego mapowania ConqueGDB: <Leader>b. Ustawia punkt przerwania w pozycji kursora. Jednak NIE jest to przełącznik, więc nie można go użyć do ponownego usunięcia. Zamiast tego będziesz musiał napisać „wyczyść” w wierszu polecenia GDB.
serup
Próbowałem użyć tego ConqueGdb i aby go uruchomić, najpierw określam plik wykonywalny - a czasami nie udaje mu się ustawić punktów hamowania - muszę skupić okno gdb i nacisnąć I, aby wstawić, zanim pojawi się punkt przerwania - czy to normalny dla ConqueGdb?
serup
11

Masz kilka wtyczek, które integrują gdb.

  • Kiedyś mieliśmy pyclewn . Projekt został wycofany po wersji 2.3. Ostatnie zatwierdzenie zostało dokonane w 2016 roku. Dla ciekawskich nadal istnieje lustro na github, gdzie jego autor zarchiwizował swoje dzieło. Uwaga: pyclewn był ostatnim etapem ewolucji innych sprytnych projektów Xaviera Degaye *.
  • vim-debugger , który integruje kilka innych debuggerów
  • Debiut vim notEvil , który działa jako „warstwa wygody dla pyclewn w celu przezwyciężenia pewnych wad”

Jest też wtyczka, która integruje lldb (z projektu LLVM)

Wygląda na to, że Bram obecnie (wrzesień 2017 r.) Pracuje nad integracją gdb z poziomu vima dzięki nowej :terminalfunkcji. Aby go użyć, musimy załadować termdebugpakiet (za pomocą :packadd termdebug), a następnie będziemy mogli uruchomić konsolę gdb w oknie vim za pomocą :TermDebug (+options). IMO możemy uznać za przyszłość integracji GDB w ramach Vima.

Luc Hermitte
źródło
4
Dobrze - czy możesz podać krótki przegląd każdej z tych wtyczek?
muru
1
?? Linki do oficjalnych stron wtyczek. Tak, mogą się zmienić, jeśli wtyczki znikną lub zostaną przeniesione w inne miejsce. W takim przypadku zaktualizuję wiadomość w pierwszym przypadku, tak jak wcześniej w SO. W drugim przypadku oznaczałoby to, że część każdej wiadomości opisującej działanie wtyczki zostałaby uznana za przestarzałą. Gorszy scenariusz: wyszczególnienie, co naprawdę robi wtyczka, stanie się przestarzałe, gdy ich autor będzie nad nimi pracował, dodawał funkcje i tak dalej. Tak czy siak. Dodaję ich krótki opis w przyszłym tygodniu ...
Luc Hermitte
2
@LucHermitte Post pojawił się w kolejce recenzji; Sam nie dodałem dokładnego tekstu tej wiadomości, system zrobił to za mnie. W każdym razie odpowiedzi tylko na link są uważane za „złe” na SO i większości, jeśli nie wszystkich, witryn SE. Nie tylko dlatego, że mogą przestać być aktualne, ale także dlatego, że tak naprawdę nie wyjaśniają rzeczy; prawie na każde pytanie można „odpowiedzieć” poprzez link do odpowiednich stron dokumentacji, do diabła, możesz nawet link do kodu źródłowego, ale czy to naprawdę coś wyjaśnia? Czy to jest naprawdę przydatne? Czy to naprawdę przyczynia się do czyjegoś zrozumienia Vima?
Martin Tournoij,
1
„Nie dodałem dokładnego tekstu tej wiadomości, system zrobił to za mnie” . DOBRZE. To wyjaśnia komunikat, który uznałem za dość dziwny. Odnośnie linków. Rozumiem zasady SO / SE dotyczące RTFM / SFTW. W przeciwieństwie do innych forów, powtarzające się / zduplikowane pytania są zamykane po wykryciu, a SO / SE zmierza bardziej w stronę wiki.
Luc Hermitte,
3
Odnośnie gdzie znaleźć wtyczki. Mógłbym powielić ich dokumentację. Ale to niewiele pomoże. Co więcej, prawie niemożliwe jest aktualizowanie odpowiedzi w miarę ewolucji wtyczek. Możliwe jest dodanie nieaktualnego krótkiego podsumowania funkcji i zajmę się tym. W każdym razie ich oficjalna strona jest punktem wejścia. Jeśli chodzi o wtyczki, jest to pierwsza ważna informacja. Rzeczywiście, ładna prezentacja może nam się spodobać ... Dopóki się nie dowiemy, że wtyczka nie działa w naszym konkretnym przypadku - co często zdarza się w przypadku FSOSS. W tym miejscu interesująca jest również lista dostępnych rozwiązań.
Luc Hermitte
7

editPolecenie GDB

Otwiera edytor w bieżącym wierszu za pomocą polecenia:

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

Domyślnie editorjest ex, ale vimtakże rozumie +<current-line>format.

Po wyjściu z edytora wracasz do gdb.

Pozwala to na swobodne przeglądanie źródła i jest szczególnie wydajne, jeśli masz ctagsintegrację.

Jest to wbudowana w gdb integracja z vimem przez biedaka: główną brakującą rzeczą jest ustalenie punktów przerwania z Vima.

edit i centrum

editdomyślnie nie wyśrodkowuje Vima wokół źródła, więc stworzyłem skrypt Pythona, który to robi: https://stackoverflow.com/questions/43557405/how-to-open-the-current-file-at-the- current-line-in-a-text-editor-from-gdb / 43557406 # 43557406

Polecenie Breakpoint dla pomocnika schowka

Ta komenda vim kopiuje specyfikator punktu przerwania typu:

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

do schowka:

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

Następnie możesz po prostu wkleić to w gdb.

Jest to wizja biedaka do integracji z gdb, aby ułatwić ustawianie punktów przerwania.

Zobacz także: https://stackoverflow.com/questions/3536600/do-you-debug-c-code-in-vim-how

Ciro Santilli
źródło
3

Chociaż nie jest to technicznie vim. cgdb to przeklęta wersja gdb z podobnymi do vimów skrótami klawiszowymi. To był mój debugger goto od lat:

https://cgdb.github.io/

ericcurtin
źródło