Пошаговый интерактивный отладчик для Rust?
Как я могу отлаживать приложение Rust шаг за шагом интерактивно, как я могу сделать с "pry" в Ruby?
Я хочу видеть и предпочтительно изменять переменные в реальном времени, когда я достигаю точки останова. Есть ли готовый готовый проект?
Ответы
Ответ 1
Компилятор Rust создает собственные двоичные файлы с собственной информацией об отладочной информации (символах), поэтому подойдет любой собственный отладчик. Это означает, что gdb
и lldb
или отладчики Windows (WinDBG или просто Visual Studio), если вы используете версию MSVC ABI Rust. Если вы хотите интегрированный опыт, RustDT - это путь (настройка в Windows: Как настроить GDB для отладки программ Rust в Windows?). Обратите внимание, что вы, вероятно, столкнетесь с тем, как я могу проверить значения переменных при отладке программ MSVC ABI Rust? в Windows и https://github.com/rust-lang/rust/issues/33062 для Mac.
Ответ 2
Я нашел хороший уровень юзабилити с VS Code и расширением CodeLLDB:
- Установите код VS
- Поиск и установка Rust (rls) из кода VS
- Установить LLDB
- Поиск и установка CodeLLDB из кода VS
- Отладчик LLDB добавил пункт главного меню "Отладка", откуда можно запустить отладчик. Когда отладка запускается впервые, вы должны выбрать среду (отладчик): выберите LLDB.
- Когда вы выбираете LLDB, файл
launch.json
будет открыт, если нет, откройте его в папке .vscode
-
Ваш launch.json
должен выглядеть так:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceRoot}/target/debug/hello_world",
"args": [],
"cwd": "${workspaceRoot}/target/debug/"
}
]
}
Вот некоторые сообщения в блоге о Rust и VS Code:
Ответ 3
Для графического отладчика есть gdbgui. Он доступен для Linux, Windows и MacOS. Он использует браузер в качестве дисплея и для взаимодействия с отладчиком.
Ответ 4
У меня есть GDB 7.11, и команда rust-gdb, кажется, дает больше информации, связанной с ржавчиной, по сравнению с нативным GDB. Например, rust-gdb правильно отображает объекты ржавчины с полными именами, а gdb просто не показывает их.
В следующем примере GDB теперь будет показывать все полужирные части.
$ 1 = Args = {inner = ArgsOs= {inner = Args= {iter = IntoIter= {buf = NonNull= {pointer = NonZero <* const std :: ffi :: os_str :: OsString>= {0x7ffff6c20060}}, фантом = PhantomData, cap = 1, ptr = 0x7ffff6c20060, end = 0x7ffff6c20078}, _dont_send_or_sync_me = PhantomData <* mut()> }}}