Вы отлаживаете код C ++ в Vim? Как?


152

Вопрос ко всем вам, кто использует Vim для разработки приложений на C ++.

В моей жизни был период, который можно охарактеризовать как «Я ненавижу Вима !!!» .. «Вим хорош!»

Однако, вырос в основном на IDE разработки Microsoft, я привык к этим F5- F11ярлыкам при отладке кода, окну наблюдения, стеку вызовов и основному коду - все это видно без необходимости вводить какие-либо команды GDB.

Итак, вот вопрос:

Вы также используете Vim для отладки? Или вы переключаетесь на какую-то IDE для этой цели? Который из?

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

Пожалуйста, не говорите мне, что вы используете GDB в качестве командной строки, смотрите только одну строку, которая отлажена, и т. Д.


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

55
Боже мой, они отвечают на вопросы "отладка моего кода на C ++, плз", но закрываем это как слишком локализованное ... смешно!
П Швед

17
Попробуй gdb -tui.
Джаеш

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

1
Суперсет: stackoverflow.com/questions/4237817/configuring-vim-for-c Но я призываю вас использовать Eclipse с клавишными привязками Vim для осведомленности класса.
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功

Ответы:


76

В отличие от других ответов, есть как минимум три варианта, которые делают именно то, что вам нужно: clewn , pyclewn и vimgdb .

Все три проекта связаны между собой. vimgdb - это патч для Vim, требующий перекомпиляции Vim. clewn - это отдельная программа, которая взаимодействует с Vim через интерфейс сокетов Netbeans. Это требует, чтобы Vim был собран с +netbeansопцией (это имеет место в последних дистрибутивах Linux, поэтому это не должно быть проблемой).

Цитировать с сайта Clewn:

Clewn реализует полную поддержку gdb в редакторе vim: точки останова, переменные наблюдения, завершение команды gdb, окна сборки и т. Д.

Я думаю, вы должны обязательно попробовать.

На домашней странице сайта pyclewn показано сравнение между тремя проектами.

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


6
Conque GDB - хорошая альтернатива. Простой в установке, простой и очень мощный.
Druesukker

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

@Druesukker, ваш ответ заслуживает официального ответа!
Солотим

@UncleZeiv Ваша ссылка на vimgdb отсутствует. Это должно пойти в github.com/larrupingpig/vimgdb-for-vim7.4 , я думаю
mcepl

2
Просто чтобы добавить отладчик vim "как" на основе GDB - cgdb.github.io
Джимми М.Г. Лим

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.

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

GDB Dashboard

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

Это не имеет ничего общего с Vim, но это легкое решение, которое многого достигает и может подойти другим Vimmers.

Другие упоминали GDB TUI, но я нашел его слишком сломанным и недостаточно мощным, чтобы его можно было терпеть.

Поэтому я перешел к решениям на основе Python API, таким как GDB Dashboard.

Я описал б / у и обоснование более подробно на: GDB разделить представление с кодом

Вот скриншот того, что он дает вам:

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

Смотрите также: /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.
user826955

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.