Синхронизация точек останова¶
Точки останова общие у редактора и отладчика через один файл. Эта страница объясняет, как именно и что эта общность гарантирует, а что нет.
Один файл, два читателя¶
<корень>/.bugsaur/
├── config.toml проект — общий, коммитится
├── breakpoints.json ваши точки останова — личные, скрыты от гита
└── .gitignore создаётся при первой записи
Neovim пишет breakpoints.json, отладчик его читает. В этом весь механизм, и он
даёт три свойства:
- Они переживают перезапуск Neovim. Набор восстанавливается при следующем открытии файла. Заводить точки заново после перезапуска редактора не нужно.
- Терминал и редактор согласованы.
bugsaur run --project .без единого--breakстартует ровно с теми точками, которые взял бы:DebugStart. - Они переживают переезд. Пути хранятся относительно корня проекта, поэтому перемещение или переименование каталога проекта набор не ломает.
Личные, а не общие¶
При первой записи рядом создаётся .bugsaur/.gitignore, который прячет
breakpoints.json от гита. config.toml принадлежит проекту, точки останова —
вам.
Существующий .gitignore не трогается: если он у вас свой, добавьте строку
breakpoints.json руками.
Номер строки хранится как есть¶
Номер строки сохраняется буквально. Если файл изменился вне редактора — rebase,
git checkout, прогон форматтера при закрытом Neovim, — точка останется на
прежнем номере строки, и переставить её придётся руками.
Файлы вне любого проекта¶
Файлу, который не лежит ни под одним корнем .bugsaur/, сохраняться некуда. Его
точки останова живут до конца сессии редактора и исчезают. Это следствие того,
что хранилище привязано к проекту, а не ошибка.
Командная строка перебивает файл¶
Явный --break заменяет сохранённый набор целиком, а не дополняет его. Без
--break берётся сохранённый набор как есть.
:DebugTest ведёт себя так же, как явно заданный набор: запуск теста использует
только точки текущего запроса, а не сохранённые.
Три состояния точки останова¶
Знак в поле у номеров строк показывает, что ответил адаптер:
| Знак | Состояние | Что означает |
|---|---|---|
● |
verified | адаптер принял точку на этой строке |
○ |
pending | ответа ещё нет |
⊗ |
rejected | адаптер отказал |
Адаптер вправе сдвинуть точку с запрошенной строки. Когда он так делает,
подтверждения на запрошенной строке нет, и она остаётся pending — состояние
отражает ответ на ваш запрос, а не наличие точки где-то рядом.
Те же состояния показаны кружками в панели Breakpoints окна.
Реакция на изменения из плагина¶
Любое изменение набора стреляет автокомандой User:
vim.api.nvim_create_autocmd("User", {
pattern = "BugsaurBreakpointsChanged",
callback = function(event)
-- event.data.paths — затронутые файлы
end,
})
Она срабатывает и на :ToggleBreakpoint, и на вызовы Lua API, и на чтение
набора файла с диска. Полное API: Команды.