Ответ 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, таких как перечисления, фрагменты и векторы. С помощью симпатичных принтеров переменные этого типа будут отображаться структурированным способом, а не низкоуровневым представлением. Для получения дополнительной информации см. https://michaelwoerister.github.io/2015/03/27/rust-xxdb.html.
Симпатичные принтеры включены только в дистрибутивы Linux (и Mac OS?) Rust, а не в 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, убедитесь, что в качестве разделителя пути вы используете функцию "вперед-вниз" ('/'), чтобы избежать проблем с побегами в этом строковом литерале.
Чтобы проверить это, запустите 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 pretty-printers for Windows": -
Для версий RustDT до версии 0.4.1, чтобы включить довольно-принтеры, вы много настраиваете конфигурацию запуска для запуска файла gdbinit, который вы только что изменили в предыдущем разделе. Gdbinit по умолчанию не выполняется, когда GDB запускается RustDT/CDT, только тот, который вы указываете в конфигурации. Поэтому измените поле "командный файл GDB" с
.gdbinit
на, напримерD:\devel\tools\TDM-GDB\gdb64\bin\gdbinit
: