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 Stream
obiekcie , 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 |