Устранение неполадок и известные проблемы (набор средств Visual Studio для Unity)

В этом разделе рассмотрены решения по устранению проблем, типичных для набора средств Visual Studio для Unity, приведено описание известных проблем и показано, как улучшить функционирование набора средств Visual Studio для Unity с помощью отчетов об ошибках.

Устранение неполадок соединения между Unity и Visual Studio

Проверка Editor Attaching включена или Code Optimization On Startup имеет значение Debug

В меню Unity выберите Edit / Preferences.

В зависимости от используемой версии Unity:

  • Убедитесь, что Code Optimization On Startup задано значение Debug.
  • Или выберите вкладку External Tools . Убедитесь, что Editor Attaching флажок включен.

Дополнительные сведения см. в документации по настройкам Unity.

Не удается подключить

  • Попробуйте временно отключить антивирусную программу или создать правила исключения для VS и Unity.
  • Попробуйте временно отключить брандмауэр или создать правила, разрешающие сетевое взаимодействие между VS и Unity по протоколам TCP/UDP.
  • Некоторые программы, например Team Viewer могут препятствовать обнаружению процессов. Попробуйте временно остановить все лишнее программное обеспечение, чтобы выяснить, повлияет ли это на что-либо.
  • Не переименовывайте основной исполняемый файл Unity, так как VSTU отслеживают только процессы "Unity.exe".

Сбои Visual Studio

Эта проблема может быть вызвана повреждением кэша MEF в Visual Studio.

Попробуйте удалить следующую папку, чтобы сбросить кэш MEF (перед этим закройте Visual Studio):

%localappdata%\Microsoft\VisualStudio\<version>\ComponentModelCache

Это должно исправить проблему. Если проблема не устранена, запустите командную строку разработчика для Visual Studio от имени администратора и выполните следующую команду:

 devenv /setup

Visual Studio не отвечает

Некоторые подключаемые модули Unity, такие как Parse, FMOD, UMP (Universal Media Player), ZFBrowser или Embedded Browser, используют собственные потоки. Эта проблема возникает, когда подключаемый модуль подключает собственный поток к среде выполнения, что блокирует вызовы ОС. Это означает, что Unity не может прервать этот поток для отладчика (или перезагрузки домена) и перестает отвечать на запросы.

Для FMOD существует обходной путь. Вы можете передать флаг инициализации FMOD_STUDIO_INIT_SYNCHRONOUS_UPDATE, чтобы отключить асинхронную обработку и выполнять всю обработку в основном потоке.

Если вы разрабатываете собственный подключаемый модуль, рекомендуется использовать асинхронные вызовы процедур (APC) и особенно SleepEx, , SignalObjectAndWaitили MsgWaitForMultipleObjectsExWaitForMultipleObjectsExWaitForSingleObjectEx функции для правильного взаимодействия с Unity и Mono, когда отладчику необходимо приостановить потоки.

Несовместимый проект в Visual Studio

Очень важно знать, что Visual Studio сохраняет состояние "Несовместимо" в параметрах проекта и не будет пытаться перезагрузить проект, пока вы не будете явно использовать Reload Project. Поэтому после каждого шага устранения неполадок убедитесь, что вы попытаетесь повторно открыть решение и попытаетесь щелкнуть правой кнопкой мыши все несовместимые проекты и выбрать Reload Project.

  1. Убедитесь, что Visual Studio задан в качестве внешнего редактора скриптов в Unity с помощью Edit / Preferences / External Tools.
  2. В зависимости от версии Unity:
    • Убедитесь, что подключаемый модуль Visual Studio установлен в Unity. Help / Aboutдолжно отображаться сообщение, например Microsoft Инструменты Visual Studio для Unity, в нижней части экрана.
    • Unity 2020.x+: убедитесь, что вы используете последний пакет редактора Visual Studio в Window / Package Manager.
  3. Попробуйте удалить все файлы проектов и решений и папку .vs в проекте.
  4. Попробуйте воссоздать проекты или решения с помощью Open C# Project или Edit / Preferences / External tools / Regenerate Project files.
  5. Убедитесь, что вы установили рабочую нагрузку Game/Unity в Visual Studio.
  6. Попробуйте очистить кэш MEF, как описано здесь.
  7. Попробуйте повторно установить Visual Studio (только для запуска с помощью рабочей нагрузки Game/Unity).
  8. Попробуйте отключить сторонние расширения в случае, если они могут повлиять на расширение Unity.Tools / Extensions

Дополнительные перезагрузки или закрытие всех открытых окон в Visual Studio

Никогда не работайте с файлами проектов непосредственно из обработчика ресурсов или иного средства. Если вам действительно необходимо совершить операции с файлом проекта, мы предоставляем для этого интерфейс API. См. раздел Проблемы со ссылками на сборку.

Если происходят лишние перезагрузки или если при перезагрузке в Visual Studio закрываются все открытые окна, убедитесь в том, что установлены все необходимые целевые пакеты .NET. Дополнительные сведения см. ниже в разделе, посвященном платформам.

В случае исключений не происходит останов отладчика

При использовании предыдущей версии среды выполнения Unity (эквивалентной версии .NET 3.5), в случае необработанного исключения (вне блока try/catch) всегда происходит останов отладчика. Если исключение обрабатывается, отладчик использует окно параметров исключений для определения того, требуется ли останов.

В новой среде выполнения Unity (эквивалентной версии .NET 4.6) появился новый способ управления пользовательскими исключениями. В результате все исключения считаются "обработанными пользователем", даже если они произошли вне блока try/catch. Поэтому их необходимо явным образом задавать в окне параметров исключений, если требуется останов отладчика.

В окне параметров исключений (отладка > параметров исключений Windows > ) разверните узел для категории исключений (например, исключения среды CLR, то есть исключения .NET) и установите флажок для конкретного исключения, которое необходимо поймать в этой категории (например, System.NullReferenceException). Можно также выбрать всю категорию исключений.

В ОС Windows система Visual Studio предлагает скачать целевую платформу Unity

При использовании устаревшей среды выполнения Unity (эквивалент .NET 3.5) Инструменты Visual Studio для Unity требуется платформа .NET Framework 3.5, который по умолчанию не устанавливается в Windows 8 или 10. Чтобы устранить эту проблему, следуйте инструкциям по скачиванию и установке .NET Framework 3.5.

При использовании новой среды выполнения Unity в зависимости от версии Unity также требуются пакеты для .NET версии 4.6 или 4.7.1. Установщик Visual Studio можно использовать для быстрой установки (измените установку, отдельные компоненты, категорию .NET, выберите все пакеты, предназначенные для версии 4.x).

Проблемы со ссылкой на сборку или свойством проекта

Если ваш проект довольно сложен с точки зрения ссылок или требуется лучше контролировать этот этап создания, вы можете использовать наш API для работы с созданным содержимым проекта или решения. Вы также можете использовать файлы ответов в своем проекте Unity и обрабатывать их.

В последних версиях Visual Studio и Unity лучше всего использовать пользовательский Directory.Build.props файл вместе с созданными проектами. После этого вы сможете внести свой вклад в структуру проекта, не вмешиваясь в процесс создания.

Точки останова с предупреждением

Если Visual Studio не удается найти исходное расположение для определенной точки останова, рядом с ней отображается предупреждение. Убедитесь, что используемый вами скрипт правильно загружен и используется в текущей сцене Unity.

Точки останова не срабатывают

Убедитесь, что используемый вами скрипт правильно загружен и используется в текущей сцене Unity. Закройте Visual Studio и Unity, а затем удалите все созданные файлы (*.csproj, *.sln), .vs папку и всю папку библиотеки. Дополнительные сведения об отладке C# можно найти на веб-сайте Unity.

Не удается выполнить отладку проигрывателей Android

Мы используем для обнаружения проигрывателей многоадресную рассылку (это стандартный механизм, применяемый в Unity), но затем применяется простое соединение TCP для подключения отладчика. Этап обнаружения — основная проблема для устройств Android.

Связь через Wi-Fi универсальна, однако она слишком медленная по сравнению с USB из-за задержки. Мы наблюдали отсутствие должной поддержки многоадресной рассылки у некоторых маршрутизаторов или устройств (этим известна серия Nexus).

Связь по USB обладает отличной скоростью для отладки. Инструменты Visual Studio для Unity теперь могут обнаруживать устройства USB и согласовывать с сервером ADB правильную переадресацию портов для отладки.

Проблемы с intelliSense или цветом кода

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

Известные проблемы

Применительно к набору средств Visual Studio для Unity существуют известные проблемы, которые возникают вследствие взаимодействия отладчика со старой версией компилятора C# в Unity. Мы работаем над устранением этих проблем, но в то же время могут возникать другие проблемы.

  • При отладке Unity иногда аварийно завершает работу.

  • При отладке Unity иногда зависает.

  • Пошаговая отладка с заходом и выходом из методов иногда ведет себя некорректно, особенно в итераторах или внутри инструкций switch.

Отчеты об ошибках

Помогите нам улучшить качество набора средств Visual Studio для Unity: отправляйте нам отчеты об ошибках при аварийном выходе, зависании или в случае других ошибок. Эти сведения помогают нам определять причину и устранять проблемы в наборе средств Visual Studio для Unity. Спасибо!

Как сообщить об ошибке в случае зависания Visual Studio

Существуют отчеты о том, что иногда Visual Studio зависает при отладке с помощью набора средств Visual Studio для Unity, но чтобы разобраться в проблеме, нам требуется больше данных. Вы можете помочь нам разобраться с проблемой, если выполните следующие действия.

Создание отчета о зависании Visual Studio во время отладки с помощью набора средств Visual Studio для Unity

В Windows:

  1. Откройте новый экземпляр Visual Studio.

  2. Откройте диалоговое окно "Присоединение к процессу". В новом экземпляре Visual Studio в главном меню выберите Отладка, Присоединение к процессу.

  3. Присоедините отладчик к замороженному экземпляру Visual Studio. В диалоговом окне Присоединение к процессу выберите замороженный экземпляр Visual Studio в таблице Доступные процессы , а затем нажмите кнопку Присоединить .

  4. Приостановите отладчик. В новом экземпляре Visual Studio в главном меню выберите Отладка, Прервать все или просто нажмите CTRL+ALT+BREAK.

  5. Создайте дамп потока. В окне командной строки введите следующую команду и нажмите клавишу ВВОД:

    Debug.ListCallStack /AllThreads /ShowExternalCode
    

    Возможно, сначала будет нужно отобразить окно Команда . В Visual Studio в главном меню выберите Представление, Другие окна, Командное окно.

На Mac:

  1. Откройте терминал и получите идентификатор процесса Visual Studio для Mac:

    ps aux | grep "[V]isual Studio.app"
    
  2. Запустите отладчик lldb.

    lldb
    
  3. Подключитесь к экземпляру Visual Studio для Mac, используя идентификатор процесса:

    process attach --pid THE_PID_OF_THE_VSFM_PROCESS
    
  4. Извлеките трассировку стека для всех потоков:

    bt all
    

Наконец, отправьте дамп потока по адресу vstusp@microsoft.com, а также опишите, что вы делали, когда среда Visual Studio зависла.

См. также