Udostępnij za pośrednictwem


Rozwiązywanie i znane problemy (Visual Studio Tools for Unity)

W tej sekcji znajdziesz rozwiązania typowych problemów z narzędziami Visual Studio Tools for Unity, opisami znanych problemów i dowiesz się, jak można ulepszyć narzędzia Visual Studio Tools for Unity, zgłaszając błędy.

Rozwiązywanie problemów z połączeniem między aparatem Unity i programem Visual Studio

Potwierdź Editor Attaching , że jest włączona lub Code Optimization On Startup jest ustawiona na wartość Debug

W menu aparatu Unity wybierz pozycję Edit / Preferences.

W zależności od używanej wersji aparatu Unity:

  • Sprawdź, czy Code Optimization On Startup jest ustawione na wartość Debug.
  • Możesz też wybrać kartę External Tools . Upewnij się, że Editor Attaching pole wyboru jest włączone.

Aby uzyskać więcej informacji, zobacz dokumentację Preferencje aparatu Unity.

Nie można dołączyć

  • Spróbuj tymczasowo wyłączyć program antywirusowy lub utworzyć reguły wykluczania zarówno dla programu VS, jak i aparatu Unity.
  • Spróbuj tymczasowo wyłączyć zaporę lub utworzyć reguły zezwalania na sieć TCP/UDP między programem VS i aparatem Unity.
  • Niektóre programy, takie jak Team Viewer, mogą zakłócać wykrywanie procesów. Możesz tymczasowo zatrzymać wszelkie dodatkowe oprogramowanie, aby sprawdzić, czy coś się zmieni.
  • Nie zmieniaj nazwy głównego pliku wykonywalnego aparatu Unity, ponieważ program VSTU monitoruje tylko procesy "Unity.exe".

Awarie programu Visual Studio

Ten problem może być spowodowany uszkodzeniem pamięci podręcznej MEF programu Visual Studio.

Spróbuj usunąć następujący folder, aby zresetować pamięć podręczną MEF (zamknij program Visual Studio przed wykonaniem tej czynności):

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

Powinno to rozwiązać problem. Jeśli problem nadal występuje, uruchom wiersz polecenia dla deweloperów dla programu Visual Studio jako Administracja istrator i użyj następującego polecenia:

 devenv /setup

Program Visual Studio przestaje odpowiadać

Kilka wtyczek aparatu Unity, takich jak Parse, FMOD, UMP (Universal Odtwarzacz multimedialny), ZFBrowser lub Embedded Browser używają wątków natywnych. Jest to problem, gdy wtyczka dołącza natywny wątek do środowiska uruchomieniowego, co powoduje blokowanie wywołań systemu operacyjnego. Oznacza to, że aparat Unity nie może przerwać działania tego wątku dla debugera (lub ponownego ładowania domeny) i przestać odpowiadać.

W przypadku funkcji FMOD istnieje obejście, można przekazać FMOD_STUDIO_INIT_SYNCHRONOUS_UPDATE flagę inicjowania, aby wyłączyć przetwarzanie asynchroniczne i wykonać wszystkie operacje przetwarzania w wątku głównym.

Jeśli tworzysz własną wtyczkę natywną, zalecamy używanie asynchronicznych wywołań procedur (APC), a zwłaszcza SleepExfunkcji , SignalObjectAndWait, , MsgWaitForMultipleObjectsEx, WaitForMultipleObjectsExlub WaitForSingleObjectEx w celu prawidłowej współpracy z aparatem Unity i Mono, gdy debuger musi zawiesić wątki.

Niezgodny projekt w programie Visual Studio

Bardzo ważne jest, aby wiedzieć, że program Visual Studio zapisuje stan "Niezgodne" w ustawieniach projektu i nie spróbuje ponownie załadować projektu, dopóki jawnie nie użyjesz polecenia Reload Project. Dlatego po każdym kroku rozwiązywania problemów upewnij się, że spróbujesz ponownie otworzyć rozwiązanie i spróbuj kliknąć prawym przyciskiem myszy wszystkie niezgodne projekty i wybrać polecenie Reload Project.

  1. Sprawdź, czy program Visual Studio jest ustawiony jako zewnętrzny edytor skryptów w środowisku Unity przy użyciu polecenia Edit / Preferences / External Tools.
  2. W zależności od wersji aparatu Unity:
    • Sprawdź, czy wtyczka programu Visual Studio jest zainstalowana w środowisku Unity. Help / About Powinien zostać wyświetlony komunikat, taki jak program Microsoft Visual Studio Tools for Unity, jest włączony u dołu.
    • Unity 2020.x+: Sprawdź, czy używasz najnowszego pakietu edytora programu Visual Studio w programie Window / Package Manager.
  3. Spróbuj usunąć wszystkie projekty/pliki rozwiązania i .vs folder w projekcie.
  4. Spróbuj ponownie utworzyć projekty/rozwiązanie przy użyciu polecenia Open C# Project lub Edit / Preferences / External tools / Regenerate Project files.
  5. Upewnij się, że zainstalowano obciążenie Game/Unity w programie Visual Studio.
  6. Spróbuj wyczyścić pamięć podręczną MEF, jak wyjaśniono tutaj.
  7. Spróbuj ponownie zainstalować program Visual Studio (aby uruchomić tylko obciążenie Game/Unity).
  8. Spróbuj wyłączyć rozszerzenia innych firm, jeśli mogą zakłócać rozszerzenie aparatu Unity w programie Tools / Extensions.

Dodatkowe ponowne ładowanie lub program Visual Studio traci wszystkie otwarte okna

Pamiętaj, aby nigdy nie dotykać plików projektu bezpośrednio z procesora zasobów lub innego narzędzia. Jeśli naprawdę musisz manipulować plikiem projektu, uwidaczniamy dla tego interfejs API. Zapoznaj się z sekcją Problemy z odwołaniami do zestawów.

Jeśli występują dodatkowe ponowne ładowanie lub jeśli program Visual Studio traci cały otwarty system Windows podczas ponownego ładowania, upewnij się, że masz zainstalowane odpowiednie pakiety przeznaczone dla platformy .NET. Aby uzyskać więcej informacji, zapoznaj się z poniższą sekcją dotyczącą platform.

Debuger nie przerywa wyjątków

W przypadku korzystania ze starszego środowiska uruchomieniowego aparatu Unity (odpowiednik platformy.NET 3.5) debuger będzie zawsze przerywany, gdy wyjątek jest nieobsługiwany (=poza blokiem try/catch). Jeśli wyjątek jest obsługiwany, debuger użyje okna wyjątku Ustawienia, aby określić, czy przerwa jest wymagana, czy nie.

W przypadku nowego środowiska uruchomieniowego (odpowiednik platformy.NET 4.6) środowisko Unity wprowadziło nowy sposób zarządzania wyjątkami użytkowników i w rezultacie wszystkie wyjątki są postrzegane jako "obsługiwane przez użytkownika", nawet jeśli znajdują się poza blokiem try/catch. Dlatego teraz musisz jawnie zaewidencjonować je w oknie wyjątku Ustawienia, jeśli debuger ma zostać przerwany.

W oknie Wyjątki Ustawienia (Debugowanie > wyjątku systemu Windows > Ustawienia) rozwiń węzeł dla kategorii wyjątków (na przykład Wyjątki środowiska uruchomieniowego języka wspólnego, czyli wyjątki platformy .NET) i zaznacz pole wyboru dla określonego wyjątku, który chcesz przechwycić w tej kategorii (na przykład System.NullReferenceException). Możesz również wybrać całą kategorię wyjątków.

W systemie Windows program Visual Studio prosi o pobranie platformy docelowej aparatu Unity

W przypadku korzystania ze starszego środowiska uruchomieniowego aparatu Unity (odpowiednik platformy .NET 3.5) narzędzia Visual Studio Tools for Unity wymagają programu .NET Framework 3.5, który nie jest instalowany domyślnie w systemie Windows 8 lub 10. Aby rozwiązać ten problem, postępuj zgodnie z instrukcjami pobierania i instalowania programu .NET Framework 3.5.

W przypadku korzystania z nowego środowiska uruchomieniowego aparatu Unity wymagane są również pakiety przeznaczone dla platformy .NET w wersji 4.6 lub 4.7.1 w zależności od wersji aparatu Unity. Można użyć instalatora programu Visual Studio, aby szybko je zainstalować (zmodyfikuj instalację, poszczególne składniki, kategorię .NET, wybierz wszystkie pakiety docelowe 4.x).

Problemy z odwołaniem do zestawu lub właściwością projektu

Jeśli projekt jest złożony pod kątem odwołań lub chcesz lepiej kontrolować ten krok generowania, możesz użyć naszego interfejsu API do manipulowania wygenerowanym projektem lub zawartością rozwiązania. Możesz również użyć plików odpowiedzi w projekcie aparatu Unity i przetworzymy je.

W przypadku najnowszych wersji programu Visual Studio i aparatu Unity najlepsze podejście wydaje się używać pliku niestandardowego Directory.Build.props wraz z wygenerowanymi projektami. Następnie będzie można współtworzyć strukturę projektu bez zakłócania procesu generowania.

Punkty przerwania z ostrzeżeniem

Jeśli program Visual Studio nie może odnaleźć lokalizacji źródłowej dla określonego punktu przerwania, zostanie wyświetlone ostrzeżenie dotyczące punktu przerwania. Sprawdź, czy używany skrypt jest poprawnie załadowany/użyty w bieżącej scenie aparatu Unity.

Punkty przerwania nie są osiągane

Sprawdź, czy używany skrypt jest poprawnie załadowany/użyty w bieżącej scenie aparatu Unity. Zamknij program Visual Studio i aparat Unity, a następnie usuń wszystkie wygenerowane pliki (*.csproj, *.sln), .vs folder i cały folder Biblioteka. Więcej informacji na temat debugowania języka C# można znaleźć w witrynie internetowej aparatu Unity.

Nie można debugować odtwarzaczy systemu Android

Do wykrywania odtwarzacza używamy multiemisji (czyli domyślnego mechanizmu używanego przez aparat Unity), ale następnie używamy zwykłego połączenia TCP w celu dołączenia debugera. Faza wykrywania jest głównym problemem dla urządzeń z systemem Android.

Wifi jest wszechstronny, ale bardzo powolny w porównaniu z USB z powodu opóźnienia. Widzieliśmy brak odpowiedniej obsługi multiemisji dla niektórych routerów lub urządzeń (seria Nexus jest dobrze znana z tego).

Usb jest bardzo szybki do debugowania, a narzędzia Visual Studio Tools for Unity są teraz w stanie wykrywać urządzenia USB i komunikować się z serwerem adb, aby prawidłowo przekazywać porty do debugowania.

Problemy z funkcją IntelliSense lub koloracją kodu

Spróbuj uaktualnić program Visual Studio do najnowszej wersji. Spróbuj wykonać te same kroki rozwiązywania problemów co w przypadku niezgodnych projektów.

Znane problemy

W narzędziach Visual Studio Tools for Unity występują znane problemy, które wynikają z interakcji debugera ze starszą wersją kompilatora języka C#. Pracujemy nad rozwiązaniem tych problemów, ale w międzyczasie mogą wystąpić następujące problemy:

  • Podczas debugowania aparat Unity czasami ulega awarii.

  • Podczas debugowania aparat Unity czasami zawiesza się.

  • Przechodzenie do i z metod czasami działa nieprawidłowo, zwłaszcza w iteratorach lub w instrukcjach switch.

Zgłaszanie błędów

Pomóż nam poprawić jakość narzędzi Visual Studio Tools for Unity, wysyłając raporty o błędach podczas awarii, zawieszania się lub innych błędów. Pomoże nam to zbadać i rozwiązać problemy w narzędziach Visual Studio Tools for Unity. Dziękujemy.

Jak zgłosić błąd, gdy program Visual Studio zawiesza się

Istnieją raporty, że program Visual Studio czasami zawiesza się podczas debugowania za pomocą narzędzi Visual Studio Tools for Unity, ale potrzebujemy więcej danych, aby zrozumieć ten problem. Możesz pomóc nam zbadać, wykonując poniższe kroki.

Aby zgłosić, że program Visual Studio zawiesza się podczas debugowania za pomocą narzędzi Visual Studio Tools for Unity

W systemie Windows:

  1. Otwórz nowe wystąpienie programu Visual Studio.

  2. Otwórz okno dialogowe Dołączanie do procesu. W nowym wystąpieniu programu Visual Studio w menu głównym wybierz pozycję Debuguj, Dołącz do procesu.

  3. Dołącz debuger do zamrożonego wystąpienia programu Visual Studio. W oknie dialogowym Dołączanie do procesu wybierz zamrożone wystąpienie programu Visual Studio z tabeli Dostępne procesy, a następnie wybierz przycisk Dołącz.

  4. Wstrzymaj debuger. W nowym wystąpieniu programu Visual Studio w menu głównym wybierz pozycję Debuguj, Przerwij wszystko lub naciśnij klawisze Ctrl+Alt+Break.

  5. Utwórz zrzut wątków. W oknie Polecenie wprowadź następujące polecenie i naciśnij klawisz Enter:

    Debug.ListCallStack /AllThreads /ShowExternalCode
    

    Może być konieczne uprzednie uwidocznienie okna polecenia . W programie Visual Studio w menu głównym wybierz pozycję Widok, Inne okna systemu Windows, Okno poleceń.

Na komputerze Mac:

  1. Otwórz terminal i pobierz identyfikator PID Visual Studio dla komputerów Mac:

    ps aux | grep "[V]isual Studio.app"
    
  2. Uruchom debuger lldb:

    lldb
    
  3. Dołącz do wystąpienia Visual Studio dla komputerów Mac przy użyciu identyfikatora PID:

    process attach --pid THE_PID_OF_THE_VSFM_PROCESS
    
  4. Pobierz stostrace dla wszystkich wątków:

    bt all
    

Na koniec wyślij zrzut wątku do vstusp@microsoft.comelementu wraz z opisem tego, co robisz, gdy program Visual Studio został zamrożony.

Zobacz też