Отладка Rust в Bugsaur¶
Адаптер: codelldb
Поставить адаптер¶
Поставьте CodeLLDB и убедитесь, что
бинарник доступен через PATH:
Если он пришёл из Mason:
Настроить¶
bugsaur init опознаёт проект по Cargo.toml и пишет по профилю на каждый
бинарник — на каждый [[bin]] из манифеста либо на пакет с src/main.rs.
Библиотеке профиля не полагается: запускать нечего.
Один бинарник¶
Рабочий каталог — корень пакета, а не target/debug, где лежит артефакт. Это то
же самое, что даёт cargo run из корня.
Workspace¶
workspace/
├── Cargo.toml members = ["crates/*"]
└── crates/
├── cli/src/main.rs
├── daemon/src/main.rs
└── core/src/lib.rs ← библиотека, профиля нет
version = 1
default = "cli"
[profiles.cli]
adapter = "codelldb"
program = "target/debug/cli"
[profiles.daemon]
adapter = "codelldb"
program = "target/debug/daemon"
Корень — корень workspace: там же лежит target/, и оттуда же работает
cargo run -p daemon.
Собрать перед запуском¶
Rust Bugsaur за вас не собирает
program указывает на артефакт сборки. Если его нет, запуск падает с
program is not readable.
Rust — единственный из четырёх языков, где program не исходник и не каталог.
Go собирает сам Bugsaur, у Python и PHP компилировать нечего.
Отладить бинарник¶
Отладить cargo test¶
Вместо отдельного профиля пользуйтесь отладкой теста под курсором: поставьте
курсор на тест и выполните :DebugTest в Neovim либо передайте место напрямую:
Bugsaur собирает тесты командой
cargo test --no-run --message-format=json, берёт получившийся тестовый бинарник
и отлаживает его. Всё остальное — адаптер, окружение, рабочий каталог —
наследуется из профиля; подменяются только программа и её аргументы.
Полный рецепт: Рецепты → Отладка cargo test.
Две вещи, специфичные для Rust¶
У release-сборки нет полезной отладочной информации¶
Бинарник, собранный с --release, оптимизирован: переменных нет, фреймы
заинлайнены, точки останова попадают в неожиданные места. Отлаживайте debug.
cargo run выставляет переменные, которых нет при прямом запуске¶
cargo run кладёт процессу часть CARGO_*. Код, читающий их в рантайме, под
отладчиком ведёт себя иначе — отладчик запускает бинарник напрямую. Добавьте
нужное явно:
Свой .env у члена workspace¶
Корень — корень workspace, поэтому crates/api/.env сам не подхватится:
Диагностика¶
| Симптом | Вероятная причина | Куда смотреть |
|---|---|---|
program is not readable |
бинарник не собран | выполните cargo build |
| Сессия не стартует | codelldb не виден через PATH |
Адаптер не запускается |
| Остановилось, но переменных нет | release-сборка или фрейм без отладочной информации | Переменные |
| Точка останова не срабатывает | неисполняемая строка или код, который не выполняется | Точки останова не срабатывают |
| Показан не тот исходник | расходятся пути | Исходник не найден |