Udostępnij przez


Debugowanie rozszerzenia programu Visual Studio

Podczas debugowania rozszerzenia programu Visual Studio specjalne wystąpienie programu Visual Studio o nazwie Wystąpienie eksperymentalne jest używane do hostowania rozszerzenia podczas uruchamiania debugera w głównym środowisku IDE programu Visual Studio. Dwa wystąpienia działają niezależnie obok siebie. W tym artykule opisano sposób debugowania rozszerzeń utworzonych za pomocą zestawu VisualStudio.Extensibility SDK, gdy są one uruchomione w eksperymentalnym wystąpieniu środowiska IDE programu Visual Studio.

Procesy rozszerzeń

Proces debugowania różni się nieco w zależności od tego, czy rozszerzenie jest uruchamiane w procesie, czy poza procesem. Zobacz Tworzenie pierwszego rozszerzenia VisualStudio.Extensibility zgodnego z zestawem VSSDK. Rozszerzenie działające w oddzielnym procesie jest uruchamiane w dedykowanym procesie dla rozszerzeń programu Visual Studio. Ten proces o nazwie Microsoft.ServiceHub.Host.Extensibility, brokeruje całą komunikację między procesem IDE programu Visual Studio a procesem hostowania rozszerzenia. Po uruchomieniu rozszerzenia przy użyciu F5 program Visual Studio uruchamia wystąpienie eksperymentalne programu Visual Studio i nawiązuje połączenie z procesem hostujący rozszerzenie. Zwykle nie musisz się przejmować konkretnym procesem, ponieważ po uruchomieniu debugera z projektu rozszerzenia przez naciśnięcie F5 w środowisku IDE programu Visual Studio, program Visual Studio lokalizuje właściwy proces, do którego ma podłączyć debuger.

Po rozpoczęciu sesji debugowania zestaw rozszerzenia i jego symbole nie są natychmiast ładowane. Przed załadowaniem rozszerzenia program Visual Studio śledzi miejsca, w których można aktywować rozszerzenie. Te informacje są przechowywane w wewnętrznym wystąpieniu VisualStudioContribution. Nawet przed załadowaniem rozszerzenia program Visual Studio zawiera informacje o tym, gdzie można go aktywować, na przykład gdy użytkownik wybierze określony element menu, naciśnie przycisk paska narzędzi lub załaduje plik określonego typu do edytora. Zestaw rozszerzenia nie zostanie załadowany, dopóki nie zostanie aktywowany w środowisku IDE. Dlatego podczas debugowania należy najpierw wykonać akcję w środowisku IDE programu Visual Studio, aby wyzwolić ładowanie rozszerzenia. Na przykład może być konieczne wybranie przycisku menu lub paska narzędzi rozszerzenia. W tym momencie zestaw rozszerzenia jest ładowany, kod inicjowania jest wykonywany i można trafić do punktów przerwania i przejść przez kod. Pierwszym kodem, który uruchomisz w rozszerzeniu, jest metoda InitializeAsync klasy Extension, a następną metodą jest InitializeServices.

Procesy i stosy wywołań

Jeśli rozszerzenie jest w trakcie przetwarzania, stos wywołań zawiera ramki stosowe programu Visual Studio, a także ramki stosowe rozszerzenia. Symbole są zwykle niedostępne dla programu Visual Studio, ale można zobaczyć wywołania, w których program Visual Studio wywołuje rozszerzenie.

W przypadku rozszerzenia poza procesem zobaczysz tylko stos wywołań rozszerzenia; Ramki stosu programu Visual Studio są w osobnym procesie. Program Visual Studio wywołuje rozszerzenie za pomocą interfejsów zgodnych z protokołem JsonRpc, host usługi ServiceHub kieruje wywołanie, a następnie wykonywanie w procesie rozpoczyna się w wywołaniu zwrotnym. Kontrola wraca do Visual Studio po wykonaniu wywołania zwrotnego.

Stan jest przekazywany w różnych metodach zgodnie z potrzebami i opakowany przez IClientContext wystąpienie w celu łatwego użycia, ale ważne jest, aby wziąć pod uwagę, że jest to migawka stanu, która może ulec zmianie między czasem migawki a czasem odczytywania go z kodu rozszerzenia lub wyświetlania go w debugerze.

Istnieje kod wewnętrzny w procesie hosta usługi ServiceHub, który obsługuje pośrednictwo wywołań procedur zdalnych (RPC - Remote Procedure Call). Jeśli wystąpi błąd w tej warstwie, nie jest on widoczny dla Ciebie. Takie błędy powinny być zgłaszane jako problemy z produktem.

Debugowanie rozszerzenia w eksperymentalnym wystąpieniu programu Visual Studio

  1. Otwórz projekt rozszerzenia.

  2. Skonfiguruj punkt przerwania, na przykład w metodzie `InitializeServices` Twojego rozszerzenia w klasie głównej pochodzącej z klasy `Extension`. Aby ustawić punkt przerwania na linii kodu, kliknij linię i naciśnij F9.

  3. W menu głównym wybierz pozycję Debuguj > rozpocznij debugowanie lub naciśnij F5. Uruchomiono wystąpienie eksperymentalne programu Visual Studio; w tym samym czasie rozpoczyna się proces hosta usługi ServiceHub.

  4. Wykonaj kroki w eksperymentalnym wystąpieniu programu Visual Studio, które powodują aktywowanie rozszerzenia lub odtworzenie scenariusza, który zamierzasz debugować.

  5. Program Visual Studio zatrzymuje się w punkcie przerwania.

    Zrzut ekranu przedstawiający debugowanie rozszerzenia w programie Visual Studio.

Wskazówka

Wygodne może być posiadanie wielu monitorów, dzięki czemu można zobaczyć zarówno debuger, jak i wystąpienie eksperymentalne w tym samym czasie na dwóch różnych monitorach. Możesz zmienić motyw w wystąpieniu eksperymentalnym, aby było bardziej oczywiste, z którym środowiskiem IDE pracujesz w danym momencie. Zobacz Zmienianie czcionek, kolorów i motywów w programie Visual Studio.

Debugowanie rozszerzenia przy użyciu Eksploratora diagnostyki

Aby uzyskać więcej informacji, zobacz VisualStudio.Extensibility Diagnostics Explorer (Eksplorator diagnostyki rozszerzalności programu VisualStudio.Extensibility ).

Rozwiązywanie problemów

Jeśli podczas uruchamiania debugera zostanie wyświetlony błąd To rozszerzenie nie jest obsługiwane w bieżącym produkcie, otwórz .vsixmanifest plik i sprawdź InstallationTarget element. Obiekt docelowy Microsoft.VisualStudio.IntegratedShell instalacji nie jest obsługiwany; zamiast tego użyj Microsoft.VisualStudio.Community. Zobacz Dokumentację schematu rozszerzenia VSIX 2.0.