Я разрабатываю код для проблем с кодированием, используя VS Code в Windows с Rust и инструментальной цепочкой Visual Studio.
Я нашел несколько руководств, объясняющих, как отлаживать исполняемый файл, сгенерированный с помощью cargo build
, лучшим из которых является Debug Rust на Windows с кодом Visual Studio и отладчиком MSVC.
Однако, когда я сталкиваюсь с проблемами, я склонен писать модульные тесты (я сделал это в Java, JavaScript, Ruby, ...), который затем отлаживаю. К сожалению, я не могу найти способ сделать это в Rust. Как настроить среду для отладки моих тестов?
Я не говорю о добавлении операторов println!
в мои тесты, поскольку я уже знаю, как это сделать. Я также не говорю о добавлении новых утверждений, потому что они находятся в тесте, а не в проверенном коде.
Я хочу использовать VS Code Debugger для кода , называемого по моему тесту.
Единичные тесты ржавчины компилируются как отдельные двоичные файлы, что означает, что вы отлаживаете их точно так же, как и любые другие двоичные файлы . После компиляции они находятся в
./target/debug/$name-$hash
.Код Visual Studio
Здесь приведены измененные версии файлов конфигурации VS Code, которые позволяют мне отлаживать модульный тест.
tasks.json
launch.json
Работа
Windbg
Создайте свои тесты:
Откройте встроенный исполняемый файл в Windbg и откройте исходный файл.
Поиск хеша - самый неприятный аспект. Лучшее решение, о котором я знаю, это написать небольшой скрипт, который создает тесты, а затем находит тестовый исполняемый файл, основанный на том, что является самым новым. Мои способности Powershell не соответствуют задаче, и я не знаю, как напрямую интегрировать ее с VS Code или Windbg.
Есть открытые проблемы для Cargo, которые помогают идентифицировать файл:
build --test
иtest --no-run
(# 1924)Вы можете либо использовать отладку
println!
Или использовать макрос assert для предоставления настраиваемых сообщений.
Это приведет к
Примечание. Третий, хороший случай также содержит
println!
, но он не будет отображаться, потому что тест будет успешным.В общем, ваши тестовые примеры всегда должны быть такими легкими, что не нужно отлаживать ваши тестовые примеры, а ваш код. Но это теория, я думаю:)