Як я можу інтегрувати 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  

що leaderозначає?
In78

@ In78 Це означає клавішу <kbd> \ </kbd> на більшості комп'ютерів. Наприклад, <leader>rозначає <kbd> \ </kbd> + <kbd> r </kbd> на моїх комп’ютерах. У посібнику Vim є запис::help leader
Парса

Не слід забувати це відображення ConqueGDB по замовчуванням: <Leader>b. Він встановлює точку розриву в положенні курсора. Однак це НЕ перемикач, тому ви не можете використовувати його для його видалення знову. Швидше, вам потрібно буде написати "ясно" у запиті GDB.
serup

Я спробував використовувати цей ConqueGdb, і для того, щоб він працював, спершу я вказав виконуваний файл - а іноді він не вдається встановити гальмівні точки - я повинен зосередити вікно gdb і натиснути I для вставки, перш ніж з’явиться точка розриву - це це нормально для ConqueGdb?
серуп

11

У вас є кілька плагінів, які інтегрують gdb.

  • У нас раніше був pyclewn . Проект був припинений після версії 2.3. Останній комітет був зроблений у 2016 році. Для допитливих досі є дзеркало на github, де його автор архівував свої роботи. Примітка: pyclewn був останнім етапом розвитку еволюції інших проектів Ксав'є Дегає *.
  • vim-debugger , що інтегрує кілька інших налагоджувачів
  • notEvil's vu -debug , який виконує роль "зручного шару для pyclewn для подолання деяких недоліків"

А також є плагін, який інтегрує lldb (від проекту LLVM)

Схоже, що Брам зараз (вересень 2017 року) працює над інтеграцією gdb зсередини vim завдяки новій :terminalфункції. Для його використання нам потрібно завантажити termdebugпакет:packadd termdebug), тоді ми зможемо запустити консоль gdb у вікно з vim :TermDebug (+options). IMO, ми можемо вважати, що це майбутнє інтеграції GDB під Vim.


4
Добре - чи можете ви дати короткий огляд кожного з цих плагінів?
муру

1
?? Посилання на офіційні сторінки плагінів. Так, вони можуть змінитися, якщо плагіни зникнуть або якщо вони переміщені в інше місце. У такому випадку я оновлю повідомлення в першому випадку, як це робилося раніше в програмі SO. А у другому випадку це означатиме, що частина будь-якого повідомлення, яка деталізує те, що робить плагін, стане застарілою. Гірший сценарій: деталізація того, що плагін насправді стане застарілим, поки їхній автор працює над ними, додасть функції тощо. Будь-який спосіб.
Додаю

2
@LucHermitte Публікація з’явилася у черзі відгуків; Я не додав точного тексту цього повідомлення, система зробила це для мене. У будь-якому випадку відповіді лише на посилання вважаються "поганими" на SO та на більшості, якщо не на всіх сайтах SE. Не тільки тому, що вони можуть застаріти, а й тому, що вони насправді не пояснюють речі; майже на будь-яке питання можна відповісти, посилаючись на потрібну сторінку документації, пекло, ви навіть можете посилатися на вихідний код, але чи справді це щось пояснює? Це справді корисно? Чи справді це сприяє чиємусь розумінню Віма?
Мартін Турной

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- поточний рядок у текстовому редакторі-від-gdb / 43557406 # 43557406

Команда переривання до помічника буфера обміну

Ця команда vim копіює специфікатор точки перелому типу:

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

до буфера обміну:

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

Тоді ви можете просто вставити це gdb.

Це прагнення бідної людини до інтеграції gdb для полегшення встановлення точок прориву.

Дивіться також: https://stackoverflow.com/questions/3536600/do-you-debug-c-code-in-vim-how


3

Хоча технічно не вим. cgdb - це проклята версія gdb з vim-подібними клавіатурними вкладками. Це був мій налагоджувач goto протягом багатьох років:

https://cgdb.github.io/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.