Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 przedstawienie zawartości obiektu danych w znaczący i zrozumiały sposób. 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 debuggera | Proces debugowania |
|---|---|
| Interfejs użytkownika debugera (DataTips, Watch Window, 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 interfejsu debugera, takiego jak DataTip, okno obserwacji lub QuickWatch. Interfejs wizualizatora jest tworzony przy użyciu DialogDebuggerVisualizer klasy i interfejsu IDialogVisualizerService . Podobnie jak we wszystkich interfejsach API wizualizatora, klasa DialogDebuggerVisualizer i IDialogVisualizerService znajdują się w Microsoft.VisualStudio.DebuggerVisualizers przestrzeni nazw.
| Strona debugera | Strona debugowania |
|---|---|
| Klasa DialogDebuggerVisualizer 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 Interfejs IDialogVisualizerService |
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 Interfejs IDialogVisualizerService |
Obiekt danych |
| Dostawca obiektów (implementuje IVisualizerObjectProvider) | Źródło obiektu (pochodzące z VisualizerObjectSource) |
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ą debugowanego.
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. Każdy z interfejsów API powoduje wywołanie metody GetData w źródle obiektu. Wywołanie Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData wypełnia System.IO.Stream, które 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 zdeserializować samodzielnie.
Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject działa, wywołując Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData 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, aby samodzielnie zserializować obiekt do formatu Stream.
ReplaceObject pobiera obiekt, który podajesz, serializuje go w Stream, a następnie wywołuje metodę ReplaceData, aby wysłać obiekt Stream do CreateReplacementObject.
Użycie jednej z metod Replace tworzy nowy obiekt danych w debugowanym programie, zastępując obiekt wizualizowany. 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 |