1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-rust-language-server

Клонировать/Скачать
debugging.md 17 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.06.2025 20:50 545024d

Отладка и устранение неполадок

Некоторые советы и рекомендации по отладке проблем с RLS. Многие из этих проблем специфичны для расширения Visual Studio Code.

Где упоминаются настройки, ниже, мы обычно имеем в виду настройки Visual Studio Code. Эти настройки могут быть установлены как для пользователя, так и для проекта, и находятся в меню Файл > Параметры > Настройки.

Частые проблемы

Отсутствие Rustup

Единственный внешний компонент, который требует расширение Visual Studio Code, это Rustup. Он сам установит все остальное (RLS, даже Rust).

Вы можете установить Rustup с rustup.rs. Расширение должно предупредить вас, если он отсутствует. См. раздел расширения ниже для других проблем.

Отсутствие компонента RLS

Стабильная, бета версия компилятора

Вы можете увидеть ошибку вроде toolchain 'stable-x86_ Yöntem 64-unknown-linux-gnu' does not contain component 'rls' for target 'x86_64-unknown-linux-gnu', однако мы гарантируем, что стабильные и бета версии компилятора содержат компонент rls. Это может быть проблема rustup.rs. Пожалуйста, отправьте дополнительную информацию в указанную проблему, если вам это нужно. Если вы столкнулись с этой ситуацией, вам может потребоваться переустановить компилятор.

$ rustup uninstall stable
$ rustup install stable
$ rustup component add rls

Ночная версия компилятораВы можете увидеть ошибку вроде toolchain 'nightly-x86_64-unknown-linux-gnu' does not contain component 'rls' for target 'x86_64-unknown-linux-gnu'.

Это связано с тем, что ночная версия компилятора может не содержать компонента RLS. Это случается иногда, когда RLS не может быть собран с текущим компилятором. Чтобы обойти эту проблему, вы можете использовать RLS из бета или стабильных каналов, дождаться новой ночной версии, которая содержит компонент RLS, или использовать более старую ночную версию, которая включает компонент RLS. Чтобы сделать последнее, следуйте эти инструкции, затем избегайте rustup update.

Устаревшие компоненты

Запустите rustup update из командной строки, чтобы убедиться, что Rust, RLS и связанные данные все обновлены.

Проект содержит как библиотеку, так и исполняемый файл

RLS в настоящее время может работать только с одним целевым объектом за раз. По умолчанию, RLS работает с исполняемым файлом, если он единственный. Вы можете собрать библиотеку, установив rust.build_lib на true (это часто самое полезное). Если у вас есть несколько исполняемых файлов, вы можете указать один для работы с помощью rust.build_bin. Автоопределение для некоторых функций будет включено в следующем выпуске.

Открытие файла Rust вне проектаПеред открытием файла Rust, RLS должен быть осведомлен о всей крейте. Это означает, что вам нужно открыть папку, содержащую Cargo.toml, в VSCode до открытия файла Rust (что запускает загрузку расширения Rust).### Информация для путей

Если у вас есть путь, такой как foo::bar::baz, RLS имеет информацию только для последнего сегмента пути. Это означает, что вы можете перейти к определению или получить информацию о типе только для baz, а не для foo или bar. Это ограничение в компиляторе Rust, но оно должно быть решено в будущем.

Тесты, примеры

RLS в настоящее время работает только с основной частью крейта. Он не работает с папками тестов или примеров.

RLS может предоставить информацию о единичных тестах, вам нужно установить rust.cfg_test на true (учтите, что это вызовет множество предупреждений о "неиспользуемом коде", поэтому по умолчанию это отключено).

Устаревшие данные

Устаревшие данные могут часто вызывать проблемы или замедлять работу RLS. Это может быть полезно, чтобы запустить cargo clean и/или удалить всю папку target для вашей крейты. Вам потребуется перезапустить расширение после этого, чтобы получить правильное перестроение.

Также возможно (хотя и реже), что Rustup может оказаться в неблагоприятном положении из-за устаревших данных. Вы можете переустановить Rustup и/или удалить его кэш (в ~/.rustup), чтобы попытаться решить эту проблему.

Устаревшие переменные окруженияЕсли вы использовали ранние версии RLS и расширений, вы могли использовать

переменные окружения RLS_PATH или RLS_ROOT. Эти переменные могут вызвать проблемы, поэтому удалите их из вашего окружения (это не потребуется с следующим выпуском расширения).## Проблемы с расширением

Мы рекомендуем использовать наше расширение VSCode. Учтите, что есть другие расширения VSCode.

Убедитесь, что расширение и VSCode обновлены. Вы можете проверить последнюю версию VSCode на их сайте. Вы можете увидеть вашу версию в пункте меню Help > About. VSCode должен сообщить вам, если оно или ваше расширение не обновлены.

Расширение должно быть способно запускать Rustup. Если Rustup установлен, он должен быть в вашем PATH. Учтите, что если вы запускаете VSCode из иконки или запуска, PATH может отличаться от PATH в терминале. Вы можете проверить эту проблему, запустив VSCode из терминала (code должен работать).

Проблемы проекта

Полезно определить, является ли проблема связана с вашим окружением или с проектом. Попробуйте запустить расширение VSCode с очень простым проектом. Используйте cargo new foo --bin, чтобы создать новый проект под названием foo, открыть папку foo в VSCode. Добавьте локальную переменную и её использование, проверьте, предоставляет ли RLS тип переменной при наведении курсора и возможность перехода к её определению.

Если вышеуказанный тест работает, то, вероятно, у вас есть проблемы с проектом. Если нет, то проблема связана с окружением.Если проект имеет много зависимостей, инициализация индексации может занять длительное время. В целом, инициализация индексации должна занимать примерно столько же времени, сколько полная компиляция проекта (обычно немного меньше, но это зависит от конкретной ситуации).Если основной crate проекта большой, он, вероятно, не будет работать хорошо с RLS (слишком медленно). Что означает "большой" в данном контексте, зависит от скорости вашего компьютера и вашего терпения к задержкам.

Проекты с Cargo workspace в настоящее время не работают.

Проекты с не-Cargo системами сборки также не работают (с некоторыми усилиями вы можете сделать это работоспособным, обратитесь к nrc на Discord).

Редко возникают проблемы с моделью сборки RLS. Вы можете попробовать запустить cargo check в командной строке, чтобы имитировать модель сборки вне IDE.

Краткие замечания о crates с большими данными

Некоторые crates могут иметь неожиданно большие данные. Большие данные могут замедлить RLS до такой степени, что он будет вынужден завершить работу (или казаться, что он завершил работу). Проверьте json-файлы в директории target/rls/deps/save-analysis. Любое значение больше 1 мегабайта подозрительно. Вы можете проверить важность этих данных, удалив json-файл(ы) и перезапустив расширение (вы должны будете делать это каждый раз после полной сборки, например, после cargo clean или обновления toolchain).

Если вы обнаружите такие большие данные, пожалуйста, сообщите об этом в этом репозитории. Мы можем попытаться оптимизировать данные или добавить crate в черный список.

Проблемы Racer vs компилятораRLS использует Racer для автозавершения кода и компилятор для всего остального (например, типа при наведении курсора). Если вы видите варианты автозавершения кода, но не видите типа при наведении курсора, и т.д., то, вероятно, у вас есть проблемы с получением данных от компилятора. Если вы видите тип при наведении курсора, но плохое автозавершение кода, то, вероятно, проблема связана с Racer. Racer и остальная часть RLS используют разные источники данных для индексации стандартных библиотек. Если у вас возникают проблемы с Racer в стандартных библиотеках, стоит проверить компонент rust-source. Если Racer работает, но другие вещи не работают, стоит проверить компонент rust-analysis (оба компонента доставляются с помощью Rustup).

Логирование

При использовании расширения VSCode вы можете просмотреть сообщения об ошибках и логи в окне Output, в разделе View > Output, в канале 'Rust Language Server', который можно выбрать из выпадающего меню справа от панели.

Чтобы увидеть больше информации в логах, установите RUST_LOG=rls=debug в вашей среде. Вы также можете установить RUST_LOG=rls_analysis=debug, чтобы увидеть логи, специфичные для анализа данных. В общем, эти логи будут выводиться в стандартный поток ошибок сервера.

Если вы видите аварийные завершения в логах, вы можете получить трассировку стека, установив RUST_BACKTRACE=1.Вы также можете записывать логи в файл, установив rust-client.logToFile на true в расширении VSCode. Файл будет находиться в корне проекта; каждый раз, когда вы запускаете расширение, вы получаете новый файл.

Вы можете получить больше информации о VSCode и самом расширении, запустив VSCode с параметром --verbose. Однако я редко нахожу это полезным. Вы также можете использовать отладчик VSCode для отладки расширения. Это может быть полезно, если расширение зависает.

Может быть полезно найти процесс rls и прикрепить к нему отладчик. Однако с оптимизированной сборкой и отсутствием символов отладки это, скорее всего, не будет полезным.

Проблемы с библиотеками

Если вы получаете ошибку типа error while loading shared libraries при запуске RLS, попробуйте следующее:

На Linux:

export LD_LIBRARY_PATH=$(rustc --print sysroot)/lib:$LD_LIBRARY_PATH

На MacOS (это может работать только, если SIP отключено (в зависимости от того, как вы запускаете RLS), вы можете изменить среду в клиенте):

export DYLD_LIBRARY_PATH=$(rustc --print sysroot)/lib:$DYLD_LIBRARY_PATH

(Это не должно происходить, если вы используете Rustup, только если вы собираете и запускаете из исходного кода).

Получение дополнительной помощи

Пожалуйста, не стесняйтесь открыть проблему, чтобы обсудить любую проблему.

Если вы используете Discord, вы можете задать вопрос в #dev-tools на сервере Rust lang. Вы можете упомянуть nrc.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-rust-language-server.git
git@api.gitlife.ru:oschina-mirror/mirrors-rust-language-server.git
oschina-mirror
mirrors-rust-language-server
mirrors-rust-language-server
master