Как я могу интегрировать GDB с Vim?

52

Вместо gdbtuiили ctrl+xпод gdbкоторым отображается исходный код в верхней части экрана, я хотел бы видеть это в моем редакторе Vim, который будет переключаться между вкладками и буферами соответственно.

Как я могу это сделать?

имя
источник
Просто для справки я нашел плагин lldb @ github.com/gilligan/vim-lldb, и скриншоты выглядят многообещающе.
имя
Кстати, кто-нибудь знает что-нибудь о windbg? Интеграция с Vim могла бы быть хорошей идеей. Хотя, на самом деле, я думаю, что это касается практически любого программного обеспечения.
Eyal Karni

Ответы:

33

Из всех плагинов, которые я пробовал, я нашел ConqueGDB лучшим подходом. ConqueGDB использует Conque Shell для встраивания интерактивной оболочки в vim, которая используется GDB.

Рабочий процесс с ConqueGDB состоит не в вводе команд GDB на терминале GDB, вы используете ярлыки в исходном коде vim. Но вы можете продолжить использовать приглашение GDB, если хотите, для более сложных команд или прокручивать, чтобы увидеть весь сеанс отладки.

Некоторые сопоставления по умолчанию для ConqueGDB, например:

  • leaderr : бегать
  • leaderc : Продолжить
  • leaders : шаг
  • leaderp : напечатать переменную под курсором

Обратите внимание, как строка курсора vim использовалась для выдачи «строки печати» GDB, текущее выполнение кода находится в другой строке (14), а в строке 10 есть точка останова.

VIM с CongueGDB

Для установки с Vundle, например:

Plugin 'vim-scripts/Conque-GDB'

Я использую эти варианты плагинов:

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
источник
что leaderзначит?
In78
@ In78 Это означает, что клавиша <kbd> \ </ kbd> на большинстве компьютеров. Например <leader>rозначает <kbd> \ </ kbd> + <kbd> r </ kbd> на моих компьютерах. В руководстве Vim есть запись для этого::help leader
Parsa
Не следует забывать это отображение ConqueGDB по умолчанию: <Leader>b. Он устанавливает точку останова в позиции курсора. Тем не менее, это НЕ переключение, поэтому вы не можете использовать его, чтобы удалить его снова. Скорее, вам придется написать «очистить» в приглашении GDB.
serup
Я попытался использовать этот ConqueGdb, и для того, чтобы заставить его работать, я сначала должен указать исполняемый файл - и иногда это не удается установить тормозные точки - я должен сфокусировать окно GDB и нажать I для вставки, прежде чем появится точка останова - это нормально для ConqueGdb?
serup
11

У вас есть несколько плагинов, которые интегрируют GDB.

  • Раньше у нас был pyclewn . Проект был прекращен после версии 2.3. Последний коммит был сделан в 2016 году. Для любопытных на github все еще есть зеркало, где его автор заархивировал свои работы. Примечание: pyclewn раньше был последним этапом в эволюции других проектов Ксавье Дегай *.
  • vim-debugger , который интегрирует несколько других отладчиков
  • vim-debug notEvil , который действует как "удобный уровень для pyclewn, чтобы преодолеть некоторые недостатки"

И есть также плагин, который интегрирует lldb (из проекта LLVM)

Похоже, что в настоящее время Брэм (сентябрь 2017 года) работает над интеграцией GDB изнутри vim, благодаря новой :terminalфункции. Чтобы использовать его, нам нужно загрузить termdebugпакет:packadd termdebug), тогда мы сможем запустить консоль GDB в окне VIM с :TermDebug (+options). ИМО, мы можем считать это будущим интеграции GDB под Vim.

Люк Эрмитт
источник
4
Хорошо. Можете ли вы дать краткий обзор каждого из этих плагинов?
Муру
1
?? Ссылки на официальные страницы плагинов. Да, они могут измениться, если плагины исчезнут или будут перемещены в другое место. В этом случае я обновлю сообщение в первом случае, как я делал это раньше на SO. А во втором случае это будет означать, что часть любого сообщения, в котором подробно описывается, что делает плагин, станет устаревшей. В худшем случае: детализация того, что на самом деле делает плагин, устареет, пока их авторы работают над ними, добавляют функции и так далее. Так или иначе. Я добавлю краткое описание их на следующей неделе ...
Люк Эрмит
2
@LucHermitte Пост появился в очереди на просмотр; Я сам не добавил точный текст этого сообщения, система сделала это для меня. В любом случае ответы только по ссылке считаются «плохими» на SO и на большинстве, если не на всех сайтах SE. Не только потому, что они могут устареть, но и потому, что они на самом деле ничего не объясняют ; почти на любой вопрос можно было бы "ответить", связавшись с нужными страницами документации, черт, вы могли бы даже сослаться на исходный код, но действительно ли это что- то объясняет? Это действительно полезно? Это действительно способствует чьему-то пониманию Vim?
Мартин Турной
1
«Я сам не добавил точный текст этого сообщения, система сделала это для меня» . ХОРОШО. Это объясняет сообщение, которое я нашел довольно странным. По поводу ссылок. Я понимаю политику SO / SE в отношении RTFM / SFTW. В отличие от других форумов, повторяющиеся / повторяющиеся вопросы закрываются при обнаружении, и SO / SE больше склоняется к вики-подходу.
Люк Эрмит
3
Относительно того, где найти плагины. Я мог бы продублировать их документацию. Но это не сильно поможет. Более того, практически невозможно поддерживать ответ в актуальном состоянии по мере развития плагинов. Возможно добавление краткого резюме функций, и я позабочусь об этом. В любом случае, их официальная страница является точкой входа. Что касается плагинов, это первая важная информация. Действительно, нам может понравиться хорошая презентация ... Пока мы не узнаем, что плагин не может работать в нашем конкретном случае - что часто случается с FSOSS. Вот где список доступных решений также интересен.
Люк Эрмит
7

editКоманда GDB

Открывает редактор текущей строки с помощью команды:

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

По умолчанию editorэто ex, но vimтакже понимает +<current-line>формат.

Когда вы выходите из редактора, вы возвращаетесь в gdb.

Это позволяет вам свободно просматривать исходный код и является особенно мощным, если у вас есть ctagsинтеграция.

Это встроенная односторонняя интеграция GDB в vim для бедного человека: главное, чего не хватает, - это установки точек останова из Vim.

edit и центр

editПо умолчанию Vim не центрируется вокруг источника, поэтому я создал скрипт Python, который делает это: https://stackoverflow.com/questions/43557405/how-to-open-the-current-file-at-the- текущая линия-в-текст-редактор из-БГДА / 43557406 # 43557406

Команда точки останова для помощника буфера обмена

Эта команда vim копирует спецификатор точки останова типа:

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

в буфер обмена:

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

Тогда вы можете просто вставить это в gdb.

Это интеграция vim в gdb для бедных, чтобы упростить установку точек останова.

Смотрите также: https://stackoverflow.com/questions/3536600/do-you-debug-c-code-in-vim-how

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник
3

Хотя технически не vim. cgdb является проклятой версией gdb с vim-подобными сочетаниями клавиш. Это был мой goto отладчик в течение многих лет:

https://cgdb.github.io/

ericcurtin
источник