Как я могу настроить GDB для отладки программ на Rust в Windows, включая настройку Rust pretty-printers и отладку в среде IDE или в командной строке?
Как настроить GDB для отладки программ на Rust в Windows?
Ответы (1)
Установка на ржавчину
Во-первых, вам нужно скомпилировать свои программы с установкой Windows GNU ABI Rust. MSVC ABI использует формат отладки, отличный от того, который понимает GDB, так что это не сработает. Скомпилированные программы MSVC ABI придется отлаживать с помощью Visual Studio (или, возможно, LLDB в будущем).
GDB
Второй шаг - получить сам GDB. Рекомендуемый вариант - получить его либо из TDM-GCC, либо из mingw-w64:
- TDM-GCC (http://tdm-gcc.tdragon.net/): доступен пакет для загрузки с Только GDB (без GCC или других инструментов, которые вам не нужно). Специальные клавиши работают только в терминале Windows. Рекомендуемый GDB для использования с Eclipse / RustDT.
- Mingw-w64 (http://mingw-w64.org/): специальные клавиши работают только в терминале Windows. В последних версиях есть ошибка: аргументы командной строки с пробелами в них анализируются неправильно.
- Cygwin: Не рекомендуется. Специальные клавиши работают в терминале Windows и терминале bash. Пути должны быть указаны в формате Cygwin, и это, похоже, ломает некоторые вещи. Не работает должным образом с Eclipse / RustDT.
Включение хороших принтеров
Rust предоставляет некоторые расширения для GDB, позволяющие лучше отображать определенные собственные типы Rust, такие как перечисления, срезы и векторы. С помощью pretty-printers переменные этого типа будут отображаться в структурированном виде, а не в низкоуровневом представлении. Для получения дополнительной информации см. https://michaelwoerister.github.io/2015/03/27/rust-xxdb.html.
Pretty-printers включены только в дистрибутивы Rust для Linux (и Mac OS?), Но не в Windows (Проблема сообщил). Но их можно заставить работать в Windows.
Загрузите архив Linux Rust (https://www.rust-lang.org/downloads.html), распакуйте и найдите внутри каталог rustc/lib/rustlib/etc
. Теперь скопируйте папку etc
в $RUST/bin/rustlib
, где $ RUST - это расположение вашей установки Rust. Скрипты Python будут расположены в $RUST/bin/rustlib/etc
.
Если вы собираетесь использовать GDB только из RustDT и у вас RustDT 0.4.1 или выше, вы можете перейти к следующему разделу: «Использование GDB в Eclipse с RustDT».
Теперь необходимо настроить GDB для загрузки этих сценариев. Найдите файл gdbinit вашей установки GDB (для TDM-GCC это должно быть gdb64\bin\gdbinit
, для mingw-w64: mingw64\etc\gdbinit
). Теперь добавьте в конец файла следующий текст:
python
print "---- Loading Rust pretty-printers ----"
sys.path.insert(0, "$RUST_GDB_ETC")
import gdb_rust_pretty_printing
gdb_rust_pretty_printing.register_printers(gdb)
end
Но замените $RUST_GDB_ETC
на расположение каталога etc
с файлами Python, например D:/devel/tools.Rust/rust/bin/rustlib/etc
. Обратите внимание, даже если это путь Windows, убедитесь, что вы используете косую черту ('/') в качестве разделителя пути, чтобы избежать проблем с escape-символом в этом строковом литерале.
Чтобы убедиться, что это работает, запустите gdb. Если вы видите сообщение «---- Загрузка Rust pretty-printers ----» перед запросом и отсутствие ошибок Python после этого, значит, все должно работать. Для подтверждения введите команду info pretty-printer
. В выводе должна быть строка с "rust_pretty_printer_lookup_function", если довольно-таки принтеры были загружены успешно.
Использование GDB в Eclipse с RustDT
Если вы успешно выполнили предыдущие шаги, вы почти готовы перейти к использованию GDB из RustDT. Несколько деталей:
Если используется TDM GDB, запускаемый исполняемый файл GDB должен быть с
$TDM_ROOT/gdb64/bin/gdb.exe
, а не с$TDM_ROOT/bin/gdb.exe
или$TDM_ROOT/bin/gdb64.exe
, потому что последние два являются оболочками для правильного исполняемого файла, и они не работают должным образом, когда RustDT / CDT запускает Процесс GDB.Если вы используете RustDT 0.4.1 или выше, симпатичные принтеры будут настроены автоматически, если RustDT найдет их в
${RUST_ROOT}/lib/rustlib/etc
. Вы можете убедиться, что это сработало, запустив запуск отладки, открыв соответствующую страницу консоли «gdb traces» в представлении консоли и выполнив поиск строки «Регистрация красивых принтеров Rust для Windows»:Для версий RustDT до 0.4.1, чтобы включить симпатичные принтеры, вы должны настроить конфигурацию запуска для запуска файла gdbinit, который вы только что изменили в предыдущем разделе. По умолчанию gdbinit не запускается, когда GDB запускается с помощью RustDT / CDT, а только тот, который вы указали в конфигурации. Поэтому измените поле "Командный файл GDB" с
.gdbinit
на, например,D:\devel\tools\TDM-GDB\gdb64\bin\gdbinit
: