Языки¶
Bugsaur не привязан к языку: он говорит на DAP, а знание о языке живёт в
адаптере. Между языками различаются три вещи: какой брать адаптер, что означает
program и что обычно ломается.
Что поддерживается¶
| Язык | Адаптер | Проект опознаётся по | program — это |
|---|---|---|---|
| Rust | codelldb |
Cargo.toml |
собранный бинарник |
| C / C++ | codelldb |
не опознаётся — настраивается вручную | собранный бинарник |
| Go | dlv |
go.mod |
каталог пакета |
| Python | debugpy |
pyproject.toml, setup.py, requirements.txt |
скрипт |
| PHP | php (встроенный) |
composer.json |
каталог проекта |
У C и C++ нет автоопределения
bugsaur init опознаёт четыре языка, и C/C++ среди них нет: единого файла-
маркера, по которому узнаётся C-проект, не существует. Сам адаптер — тот же
codelldb, что и для Rust — работает нормально, просто профиль пишется
руками. См. C / C++.
Что генерирует bugsaur init¶
Определение идёт вверх от каталога запуска, и ближайший проект выигрывает у объемлющего. Дальше пишется по профилю на каждую вещь, которую стоит отлаживать:
| Язык | По профилю на |
|---|---|
| Rust | бинарник: каждый [[bin]] либо пакет с src/main.rs. Библиотеке профиля не полагается |
| Go | каталог с package main: корень модуля и прямые подкаталоги cmd/* |
| Python | точку входа: main.py, app.py, manage.py, __main__.py в корне и src/<pkg>/__main__.py |
| PHP | проект |
Проект без запускаемой точки входа даёт ноль профилей, и запуск останавливается с ошибкой, а не пишет конфиг с выдуманной программой внутри.
Что одинаково для всех¶
- Относительные пути считаются от корня проекта — ближайшего вверх по дереву
каталога с
.bugsaur/. - Рабочим каталогом по умолчанию становится корень проекта, а не каталог программы. См. Настройка → Рабочий каталог.
${root}разворачивается в абсолютный путь корня вenv,args,adapter_commandиlaunch_arguments.- Точки останова лежат в
.bugsaur/breakpoints.jsonи общие с редактором.
Сводка покрытия¶
✅ работает по умолчанию · ⚠️ одна явная строка в профиле · ❌ не покрывается
| Сценарий | Go | Rust | Python | PHP |
|---|---|---|---|---|
.env в корне, приложение читает его само |
✅ | ✅ | ✅ | — |
.env, приложение его не читает |
⚠️ env_file |
⚠️ env_file |
⚠️ env_file |
— |
Относительные пути к configs/, migrations/ |
✅ | ✅ | ✅ | — |
| Несколько отлаживаемых частей | ✅ cmd/* |
✅ по бинарникам | ✅ по точкам входа | — |
| Аргументы командной строки | ✅ args |
✅ args |
✅ args |
— |
| Точка входа в нестандартном месте | ⚠️ | ✅ | ⚠️ | — |
Монорепа, общий .env выше корня |
⚠️ env_file = "../..." |
⚠️ | ⚠️ | — |
Отладка тестов с testdata/ |
⚠️ cwd |
⚠️ cwd |
⚠️ cwd |
— |
| Запуск без предварительной сборки | ✅ | ❌ соберите сами | ✅ | — |
go.work / несколько модулей |
❌ | — | — | — |
| Рабочий каталог и окружение | ✅ | ✅ | ✅ | ❌ по устройству |
У PHP в большинстве строк прочерк, а не галочка, потому что его адаптер ничего не запускает — он слушает, а PHP-процесс поднимает кто-то другой. Что это меняет, разобрано на странице PHP.