Пошаговый интерактивный отладчик для 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:

  1. Установите код VS
  2. Поиск и установка Rust (rls) из кода VS
  3. Установить LLDB
  4. Поиск и установка CodeLLDB из кода VS
  5. Отладчик LLDB добавил пункт главного меню "Отладка", откуда можно запустить отладчик. Когда отладка запускается впервые, вы должны выбрать среду (отладчик): выберите LLDB.
  6. Когда вы выбираете LLDB, файл launch.json будет открыт, если нет, откройте его в папке .vscode
  7. Ваш 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()> }}}