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

Отладка Rust в Bugsaur

Адаптер: codelldb

Поставить адаптер

Поставьте CodeLLDB и убедитесь, что бинарник доступен через PATH:

command -v codelldb

Если он пришёл из Mason:

export PATH="$HOME/.local/share/nvim/mason/bin:$PATH"

Настроить

bugsaur init опознаёт проект по Cargo.toml и пишет по профилю на каждый бинарник — на каждый [[bin]] из манифеста либо на пакет с src/main.rs. Библиотеке профиля не полагается: запускать нечего.

Один бинарник

app/
├── Cargo.toml       [package] name = "app"
├── src/main.rs
└── .env
version = 1
default = "app"

[profiles.app]
adapter = "codelldb"
program = "target/debug/app"

Рабочий каталог — корень пакета, а не 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.

cargo build && bugsaur gui --project . --break src/main.rs:10

Rust — единственный из четырёх языков, где program не исходник и не каталог. Go собирает сам Bugsaur, у Python и PHP компилировать нечего.

Отладить бинарник

cargo build
bugsaur gui --project . --profile cli --break src/main.rs:15

Отладить cargo test

Вместо отдельного профиля пользуйтесь отладкой теста под курсором: поставьте курсор на тест и выполните :DebugTest в Neovim либо передайте место напрямую:

bugsaur gui --project . --test-at src/lib.rs:42

Bugsaur собирает тесты командой cargo test --no-run --message-format=json, берёт получившийся тестовый бинарник и отлаживает его. Всё остальное — адаптер, окружение, рабочий каталог — наследуется из профиля; подменяются только программа и её аргументы.

Полный рецепт: Рецепты → Отладка cargo test.

Две вещи, специфичные для Rust

У release-сборки нет полезной отладочной информации

Бинарник, собранный с --release, оптимизирован: переменных нет, фреймы заинлайнены, точки останова попадают в неожиданные места. Отлаживайте debug.

cargo run выставляет переменные, которых нет при прямом запуске

cargo run кладёт процессу часть CARGO_*. Код, читающий их в рантайме, под отладчиком ведёт себя иначе — отладчик запускает бинарник напрямую. Добавьте нужное явно:

env = { CARGO_MANIFEST_DIR = "${root}" }

Свой .env у члена workspace

Корень — корень workspace, поэтому crates/api/.env сам не подхватится:

[profiles.api]
adapter = "codelldb"
program = "target/debug/api"
env_file = "crates/api/.env"

Диагностика

Симптом Вероятная причина Куда смотреть
program is not readable бинарник не собран выполните cargo build
Сессия не стартует codelldb не виден через PATH Адаптер не запускается
Остановилось, но переменных нет release-сборка или фрейм без отладочной информации Переменные
Точка останова не срабатывает неисполняемая строка или код, который не выполняется Точки останова не срабатывают
Показан не тот исходник расходятся пути Исходник не найден