Ви налагоджуєте код C ++ у Vim? Як?


152

Питання до всіх вас, хто використовує Vim для розробки додатків C ++.

У моєму житті був період, який можна охарактеризувати як «Я ненавиджу Віма !!!» .. «Вім приємний!»

Однак, вирісши в основному на IDE розробників Microsoft, я звик до таких F5- F11ярлики при налагодженні коду, вікно перегляду, стек виклику та основний код - все це видно без необхідності вводити будь-які команди GDB.

Отже, ось питання:

Чи використовуєте ви також Vim для налагодження? Або для цього ви переходите на якусь IDE? Який?

Для тих, хто використовує Vim для налагодження коду: чи є плагіни для встановлення точок прориву в редакторі, виділіть рядок, який ми зараз налагоджуємо, автоматичну навігацію під час кроку, кроку, виходу?

Будь ласка, не кажіть мені, що ви використовуєте GDB як командний рядок, бачите лише один рядок, який налагоджений тощо.


1
Я впевнений, що ви все ще можете знайти людей, які розробляють і налагоджують "ed".
e2-e4

55
Боже мій, вони відповідають на питання "налагодити мій код C ++ plz", але закривають це як занадто локалізований ... смішний!
П Швед

17
Спробуйте gdb -tui.
Jayesh

1
Ви застрягли на Vim чи готові дивитись на інших редакторів, таких як Emacs, у яких вбудована велика інтеграція gdb? Чи є основною проблемою з gdb вихід одного рядка за замовчуванням чи уникати введення l (ist) постійно, при чому gdb -tui допомагає?
jla

1
Суперсет: stackoverflow.com/questions/4237817/configuring-vim-for-c Але я закликаю вас використовувати Eclipse with Vim keyinindsind для обізнаності класу.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Відповіді:


76

На відміну від інших відповідей, є щонайменше три варіанти, які роблять саме те, що вам потрібно: clewn , pyclewn та vimgdb .

Усі три проекти пов'язані між собою. vimgdb - це патч проти Vim і вимагає перекопіювання Vim. clewn - це окрема програма, яка спілкується з Vim через інтерфейс розетки Netbeans. Це вимагає побудови Vim за допомогою +netbeansопції (це стосується останніх дистрибутивів Linux, тому це не повинно бути проблемою).

Цитувати з веб-сайту кліна:

Clewn реалізує повну підтримку gdb у редакторі vim: точки прориву, перегляд змінних, завершення команд gdb, складання вікон тощо.

Я думаю, ви повинні обов'язково дати йому піти.

Домашня сторінка веб-сайту pyclewn показує порівняння трьох проектів.

Кілька місяців тому я спробував pyclewn. Це було трохи складно встановити, але це виглядає добре, хоча і перспективно. Я просто зробив кілька тестів, і ви могли встановити закладки тощо, звичайні речі, яких ви очікували від графічного налагоджувача. Я зрештою не використовував його з умовних причин, але хочу спробувати ще раз.


6
Conque GDB - це приємна альтернатива. Простий в монтажі, простий і дуже потужний.
Druesukker

@UncleZeiv vimgdb застарів. Я висловив необхідність оновлення тут: github.com/larrupingpig/vimgdb-for-vim7.4/isissue/4
hlin117

@Druesukker, ваша відповідь заслуговує на формальну відповідь!
солотим

@UncleZeiv Ваше посилання на vimgdb не має. Слід перейти на github.com/larrupingpig/vimgdb-for-vim7.4 , я здогадуюсь
mcepl

2
Просто для додавання відладчика vim "like" на основі GDB - cgdb.github.io
Jimmy MG Lim

24

Vim офіційно додав вбудований налагоджувач у версії 8.1, випущеній у травні 2018 року. Ця функція була присутня і в деяких версіях версії 8.0, ще в серпні 2017 року.

Наступні команди vim завантажують плагін і запускають налагоджувач.

:packadd termdebug
:Termdebug

Остання команда приймає програму як необов'язковий аргумент, або ж альтернативно програму можна завантажити з gdbвікна fileкомандою.

З завантаженим плагіном gdbможна інтерактивно використовувати у відповідному вікні. Наприклад, можна встановити точки перерви, перейти до коду та перевірити змінні.

Команди Vim можуть видаватися для взаємодії з gdb. Деякі відповідні команди включають в себе :Step, :Over, :Finish, :Continue, :Stop, :Break, :Clear, і :Evaluate.

Крім того, вгорі вікна редактора є кнопки, які можна натискати, для взаємодії з ними gdb.

Вікно редактора оновлюється, щоб відобразити стан налагодження. Точки перерви позначаються символом >>та виділяється поточна лінія.

Вбудована довідкова сторінка містить ретельну документацію.

:help terminal-debug

Нещодавно я написав допис у блозі, який проходить приклад сесії.

https://www.dannyadam.com/blog/2019/05/debugging-in-vim/


14

Vim - хороший редактор, але для налагодження я використовую налагоджувач (як GDB).

Але не потрібно використовувати GDB в текстовому режимі; ви можете використовувати графічний фронт, наприклад KDbg , DDD або Insight .

Існують способи отримання GDB у Vim (але тоді ви отримуєте налагодження на основі тексту).


10

editКоманда GDB

Відкриває редактор у поточному рядку за допомогою команди:

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

За замовчуванням editorє ex, але vimтакож розуміє +<current-line>формат.

Коли ви виходите з редактора, ви повертаєтесь до gdb.

Це дозволяє вільно переглядати джерело і є особливо потужним при ctagsінтеграції.

Це вбудований в один спосіб спосіб інтеграції gdb до vim: головне, що бракує, - це встановити точки прориву від Vim.

edit і центр

editне центрує Vim за замовчуванням навколо джерела, тому я створив сценарій Python, який це робить: Як відкрити поточний файл у поточному рядку в текстовому редакторі від GDB?

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

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

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

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

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

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

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

Інформаційна панель GDB

https://github.com/cyrus-and/gdb-dashboard

Це не має нічого спільного з Vim, але це легке рішення, яке досягає багато чого і може підійти до інших Vimmers там.

Інші згадали про GDB TUI, але я вважав це занадто розбитим і недостатньо потужним, щоб переносити його.

Тож я замість цього перейшов до програм Python API, таких як панель інструментів GDB.

Я описав використане та обґрунтування більш докладно на веб-сайті: gdb split view з кодом

Ось скріншот того, що він дає вам:

введіть тут опис зображення

Дивіться також: /vi/2046/how-can-i-integrate-gdb-with-vim

Відмовтеся і використовуйте справжню IDE

З урахуванням сказаного, це найкраще рішення для більшості людей, включаючи і мене. Більшість людей просто зароблять багато часу, якщо їм вдасться стрибнути навколо визначень в класі C ++, не вибираючи і не встановлюючи декілька самих різних плагінів, і це включає під час крокової налагодження матеріалів. Станом на 2020 рік для мене найгіршим був Eclipse: https://www.slant.co/topics/1411/~best-ides-for-c-on-linux


4

Використання налагоджувача на рівні джерела - це лише один із багатьох способів діагностування несправної поведінки програми, і я рідко виявляю, що я запускаю її - незважаючи на те, що це зробити дуже просто.

Тож для мене просто немає притаманної переваги використання текстового редактора, який також є налагоджувачем . Натомість я використовую текстовий редактор, який я віддаю перевагу - незалежно від того, який відладчик я вирішу використовувати. На даний момент я здебільшого використовую для цих цілей gedit та kdbg , але цей вибір змінюється самостійно з часом.


1
Якщо ви не розробляєте віддалений на хості розробки без kde / gnome.
користувач826955

3

Оновлення 2020: Існує новий плагін vimspector, використовуючи протокол адаптера налагодження

  1. Встановіть плагін https://github.com/puremourning/vimspector#installation

  2. Налаштувати (написати .vimspector.json)

  3. Компілюйте з символом налагодження g++ cpp.cpp -ggdb -o cpp

  4. Натисніть, F4щоб почати налагодження

введіть тут опис зображення

  • Зверніть увагу .vimspector.jsonна мій домашній каталог (так що працюйте в будь-якому підкаталозі)
{
"configurations": {
  "Python - Launch": {
    "adapter": "vscode-python",
    "configuration": {
      "name": "Python: Launch current file",
      "type": "python",
      "request": "launch",
      "stopOnEntry": true,
      "stopAtEntry": true,
      "console": "externalTerminal",
      "debugOptions": [],
      "cwd": "${cwd}",
      "program": "${file}"
    }
  },
  "Perl - Launch": {
    "adapter": "vscode-perl-debug",
    "configuration": {
      "name": "Perl: Launch current file",
      "type": "perl",
      "request": "launch",
      "exec": "/usr/bin/env perl",
      "execArgs": [],
      "stopOnEntry": true,
      "stopAtEntry": true,
      "console": "externalTerminal",
      "sessions": "single",
      "debugOptions": [],
      "cwd": "${cwd}",
      "program": "${file}"
    }
  },
  "C - Launch": {
    "adapter": "vscode-cpptools",
    "configuration": {
      "name": "Cpp: Launch current file",
      "type": "cppdbg",
      "request": "launch",
      "externalConsole": true,
      "logging": {
        "engineLogging": true
      },
      "stopOnEntry": true,
      "stopAtEntry": true,
      "debugOptions": [],
      "MIMode": "gdb",
      "cwd": "${cwd}",
      "program": "${fileDirname}/${fileBasenameNoExtension}"
    }
  },
  "Java - Launch": {
    "adapter": "vscode-java",
    "configuration": {
      "name": "Java: Launch current file",
      "request": "launch",
      "mainClass": "com.vimspector.test.TestApplication",
      "sourcePaths": [ "${workspaceRoot}/src/main/java" ],
      "classPaths": [ "${workspaceRoot}/target/classes" ],
      "args": "hello world!",
      "stopOnEntry": true,
      "console": "integratedTerminal"
    }
  }
} }

1

Нещодавно довгий час працював над додатком, який вимагав купки речей, щоб він знаходився на коробці, на якій він працював (пристрій налаштовано), я написав код у vim, мав сценарії, які автоматизував побудову, пересилаючи його на сервер , який мав там скрипт, щоб помітити дозорний файл, висунутий разом із двійковими файлами. Потім це перезапустить відповідні сервіси у вікні, і в іншому вікні ssh у мене булоtail -f запустив свій файл журналу.

Якщо коротко розповісти, я не використовував налагоджувача взагалі. Якби у мене щось несподівано померло, я просто зіткнувся з рівнями реєстрації, повторив це і побачив, що було останньою справою, яку зафіксували перед смертю, а потім проаналізував це і виправте проблему.

Приємно було те, що коли у клієнтів виникли проблеми, я просто попрошу журнал рівня налагодження і міг би визначити проблему, навіть не вимагаючи доступу до їх сервера.

... але так, були часи, коли було б непогано мати налагоджувача.


0

Просто для додання вище:

IMO vim, як правило, досить легкий редактор, і налагодження має тенденцію до ваги. Існують способи зробити це, тобто використовувати vim7.4 + з

:terminal

та запуск одного з наступних налагоджувачів командного рядка (curses). Деякі використовуються за замовчуванням для IDE, про які ви ніколи не знали. тобто lldb = xcode.

очевидно, що є більше кліків; @ всі сміливо пропонуйте та додайте до списку. Дякую!

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