Перейти к содержанию

Свои адаптеры

Отлаживать можно всё, у чего есть DAP-адаптер. Добавить его — значит написать запись каталога; менять отладчик не нужно.

Добавить адаптер

Создайте ~/.config/bugsaur/adapters.toml:

[adapters.mylang]
id = "mylang"
command = "mylang-dap"
args = ["--stdio"]
transport = "stdio"

Затем используйте id в профиле:

[profiles.app]
adapter = "mylang"
program = "src/main.ml"

Ваши записи накладываются поверх встроенного каталога по id: новый id добавляет адаптер, существующий заменяет встроенную запись.

Чтобы держать каталог внутри проекта, укажите его явно:

bugsaur gui --adapters ./tools/adapters.toml --project .

--adapters заменяет поиск по двум конфигурационным путям; встроенный каталог по-прежнему служит основой.

Выбор транспорта

stdio — Bugsaur запускает адаптер и общается через его stdin и stdout:

transport = "stdio"

tcp — адаптер слушает, Bugsaur подключается. Bugsaur выбирает свободный порт и подставляет его в tcp_argument:

tcp_argument = "--listen={host}:{port}"
transport = { tcp = { host = "127.0.0.1" } }

Доступные там подстановки — {host} и {port}.

Умолчания для тела запроса

launch_arguments в записи каталога задаёт умолчания для всех профилей с этим адаптером, а профиль может их перебить:

[adapters.mylang.launch_arguments]
stopOnEntry = false
console = "internalConsole"

Сборка перед запуском

Если программы для этого адаптера нужно компилировать, опишите это:

[adapters.mylang.build]
command = "mylangc"
args = ["-g", "-o", "{out}", "{program}"]

{out} — бинарник, который ожидает получить Bugsaur, {program} — то, что названо в program профиля. Результат кладётся в <корень>/.bugsaur/build/.

Без build Bugsaur ничего не собирает — адаптер получает program как есть.

Медленно стартующие адаптеры

Когда задержка свойственна адаптеру, а не проекту, таймауту место в каталоге:

[adapters.mylang]
id = "mylang"
command = "mylang-dap"
transport = "stdio"
launch_timeout = 300

Приоритет: профиль → каталог → 120 секунд.

Запуск вообще без профиля

Для разового случая конфиг проекта можно не заводить:

bugsaur gui \
  --adapter codelldb \
  --program /absolute/path/to/program \
  --cwd /absolute/path/to/dir \
  --launch-arguments '{"stopOnEntry": true}'
Флаг Что делает
--adapter <id> какую запись каталога использовать
--program <путь> что отлаживать
--cwd <путь> рабочий каталог; здесь по умолчанию текущий, потому что корня проекта нет
--launch-arguments <json> тело DAP-запроса в виде JSON
--adapters <путь> какой каталог читать

В этом режиме конфиг проекта не читается, а значит нет и секции [ui] — тема и раскладка берутся из командной строки или из умолчаний.

Если новый адаптер не работает

Включите категорию DAP в панели Logs и прочитайте обмен. Поскольку Bugsaur не интерпретирует специфичные для адаптера поля, отклонённый launch почти всегда означает, что адаптер возражает против полученного тела — текст ошибки приходит от него самого и обычно называет проблемный ключ.