Как устроена интеграция¶
Столько механики, сколько нужно, чтобы рассуждать о ней, когда что-то ведёт себя странно. Само устройство — в Разработке.
Кто с кем говорит¶
Neovim ── source frontend protocol ──► bugsaur ── DAP ──► адаптер ──► ваша программа
(Lua) по Unix-сокету (ядро) (dlv, codelldb, …)
Neovim не является DAP-клиентом и с адаптером не разговаривает никогда. Он шлёт намерения — запусти это, переключи точку здесь, шагни — и получает состояние для отображения. DAP-сессией владеет Bugsaur.
Сокет¶
bugsaur gui --socket <путь> поднимает окно и бэкенд-сессию, после чего
принимает source frontend на этом сокете. При gui = true плагин запускает этот
режим сам, поэтому отдельный терминал не нужен.
Сокет создаётся автоматически: /tmp/rust-debugger-nvim-<pid>.sock.
Жизненный цикл: редактор не владелец¶
Закрытие Neovim не завершает сессию. Бэкенд продолжает работать, а подключившийся
заново фронтенд получает актуальное состояние через обмен hello — не
проигрывание пропущенного, а снимок того, как всё обстоит сейчас.
Это практическое следствие модели владения: ваш редактор — наблюдатель, который может уйти и вернуться.
С auto_attach = true старт Neovim молча прицепляется к идущей сессии проекта,
а не заводит новую.
Что пересекает границу¶
| Направление | Что |
|---|---|
| Neovim → Bugsaur | запуск сессии с профилем; набор точек останова; команды выполнения; просьба вывести окно вперёд |
| Bugsaur → Neovim | текущее место остановки; состояния точек от адаптера; фаза сессии |
Заметно отсутствуют: переменные, содержимое стека и результаты watches. Их рисует окно отладчика, у которого они и так есть, а отправка их ещё и редактору означала бы двух владельцев одного состояния.
Почему окно — отдельный процесс¶
Окно отладчика не является буфером Neovim. Это нативное окно процесса bugsaur,
и поэтому:
- оно переживает редактор;
- обработка клавиатуры у него своя, и mappings Neovim до него не дотягиваются — см. Клавиши;
- его можно поднять независимо, чем и занимаются
:DebugFocusиgui_focus_on_stop.
Когда соединения нет¶
Проверяйте по порядку:
bugsaur.state.last_errorв Lua;- что сокет существует:
/tmp/rust-debugger-nvim-<pid>.sock; - что
binaryвsetup()указывает на существующий исполняемый файл.
Подробнее: Диагностика → Интеграция с Neovim.