Udostępnij za pośrednictwem


Architektura wizualizatora

Architektura wizualizatora debugera ma dwie części:

  • Strona debugera jest uruchamiana w debugerze programu Visual Studio. Kod po stronie debugera tworzy i wyświetla interfejs użytkownika dla wizualizatora.

  • Strona debugowania jest uruchamiana w ramach procesu debugowania programu Visual Studio ( debuggee).

    Wizualizator to składnik debugera, który umożliwia debugerowi wyświetlanie (wizualizowanie) zawartości obiektu danych w zrozumiałym, zrozumiałym formularzu. Niektóre wizualizatory obsługują również edytowanie obiektu danych. Pisząc niestandardowe wizualizatory, można rozszerzyć debuger w celu obsługi własnych niestandardowych typów danych.

    Obiekt danych, który ma zostać zwizualizowany, znajduje się w trakcie debugowania ( proces debugowania ). Interfejs użytkownika, który wyświetli dane, zostanie utworzony w ramach procesu debugera programu Visual Studio:

Proces debugera Proces debugowania
Interfejs użytkownika debugera (Dane Wskazówki, Okno zegarka, QuickWatch) Obiekt danych do wizualizacji

Aby zwizualizować obiekt danych w interfejsie debugera, potrzebny jest kod do komunikowania się między dwoma procesami. W związku z tym architektura wizualizatora składa się z dwóch części: kodu po stronie debugera i kodu po stronie debugowania.

Kod po stronie debugera tworzy własny interfejs użytkownika, który można wywołać z poziomu interfejsu debugera, takiego jak etykietka danych, okno czujki lub QuickWatch. Interfejs wizualizatora jest tworzony przy użyciu DialogDebuggerVisualizer klasy i interfejsu IDialogVisualizerService . Podobnie jak we wszystkich interfejsach API wizualizatora, element DialogDebuggerVisualizer i IDialogVisualizerService znajdują się w Microsoft.VisualStudio.DebuggerVisualizers przestrzeni nazw.

Strona debugera Strona debugowania
DialogDebuggerVisualizer, klasa

IDialogVisualizerService, interfejs
Obiekt danych

Interfejs użytkownika pobiera dane do wizualizacji z dostawcy obiektów, który istnieje po stronie debugera:

Strona debugera Strona debugowania
DialogDebuggerVisualizer, klasa

IDialogVisualizerService, interfejs
Obiekt danych
Dostawca obiektów (implementuje IVisualizerObjectProvider)

Po stronie debuggee znajduje się odpowiedni obiekt o nazwie Źródło obiektu:

Strona debugera Strona debugowania
DialogDebuggerVisualizer, klasa

IDialogVisualizerService, interfejs
Obiekt danych
Dostawca obiektów (implementuje IVisualizerObjectProvider) Źródło obiektu (pochodzące z VisualizerObjectSourceobiektu )

Dostawca obiektów udostępnia dane obiektu, które mają być wizualizowane w interfejsie użytkownika wizualizatora. Dostawca obiektów pobiera dane obiektu ze źródła obiektu. Dostawca obiektów i źródło obiektów udostępniają interfejsy API do komunikowania danych obiektów między stroną debugera a stroną debugera.

Każdy wizualizator musi uzyskać obiekt danych do wizualizacji. W poniższej tabeli przedstawiono odpowiednie interfejsy API używane przez dostawcę obiektów i źródło obiektów w tym celu:

Dostawca obiektów Źródło obiektu
GetData

—lub—

GetObject
GetData

Zwróć uwagę, że dostawca obiektów może używać elementu GetData lub GetObject. Dowolny interfejs API powoduje wywołanie metody GetData w źródle obiektu. Wywołanie w celu Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData wypełnienia obiektu System.IO.Stream, który reprezentuje serializowaną formę obiektu, który jest wizualizowany.

Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject deserializuje dane z powrotem do formularza obiektu, który można następnie wyświetlić w interfejsie użytkownika utworzonym za pomocą polecenia DialogDebuggerVisualizer. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData wypełnia dane jako nieprzetworzone Stream, które należy deserializacji samodzielnie. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject program działa przez wywołanie Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData metody w celu pobrania serializowanej Stream, a następnie deserializacji danych. Użyj Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData , gdy obiekt nie można serializować przez platformę .NET i wymaga serializacji niestandardowej. W takim przypadku należy również zastąpić metodę Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.Serialize .

Jeśli tworzysz wizualizator tylko do odczytu, komunikacja jednokierunkowa z GetData lub GetObject jest wystarczająca. Jeśli tworzysz wizualizator obsługujący edycję obiektów danych, musisz zrobić więcej. Musisz mieć możliwość wysyłania obiektu danych z dostawcy obiektów z powrotem do źródła obiektów. W poniższej tabeli przedstawiono interfejsy API dostawcy obiektów i źródła obiektów używane do tego celu:

Dostawca obiektów Źródło obiektu
ReplaceData

—lub—

ReplaceObject
CreateReplacementObject

Zwróć uwagę, że istnieją dwa interfejsy API, których może używać dostawca obiektów. Dane są zawsze wysyłane z dostawcy obiektów do źródła obiektów jako Stream, ale ReplaceData wymaga serializacji obiektu do Stream siebie.

ReplaceObject pobiera obiekt, który podajesz, serializuje go w Streamobiekcie , a następnie wywołuje metodę ReplaceData , aby wysłać element Stream do CreateReplacementObjectelementu .

Za pomocą jednej z metod Replace tworzy nowy obiekt danych w debuggee, który zastępuje wizualizowanie obiektu. Jeśli chcesz zmienić zawartość oryginalnego obiektu bez jego zastąpienia, użyj jednej z metod transferu pokazanych w poniższej tabeli. Te interfejsy API przesyłają dane w obu kierunkach jednocześnie bez zastępowania obiektu, który jest wizualizowany:

Dostawca obiektów Źródło obiektu
TransferData

—lub—

TransferObject
TransferData