Architektura vizualizéru
Architektura vizualizéru ladicího programu má dvě části:
Na straně ladicího programu sady Visual Studio se spustí ladicí program. Kód na straně ladicího programu vytvoří a zobrazí uživatelské rozhraní vizualizéru.
Na straně ladicího programu se spustí proces, který sada Visual Studio ladí ( ladicí prostředí).
Vizualizér je komponenta ladicího programu, která ladicímu programu umožňuje zobrazit (vizualizovat) obsah datového objektu ve smysluplné a srozumitelné podobě. Některé vizualizéry podporují také úpravy datového objektu. Napsáním vlastních vizualizérů můžete ladicí program rozšířit tak, aby zpracovával vlastní datové typy.
Datový objekt, který se má vizualizovat, se nachází v procesu, který ladíte ( proces ladění ). Uživatelské rozhraní, které zobrazí data, se vytvoří v rámci procesu ladicího programu sady Visual Studio:
Proces ladicího programu | Proces ladění |
---|---|
Uživatelské rozhraní ladicího programu (Data Tipy, Okno kukátka, QuickWatch) | Datový objekt, který se má vizualizovat |
K vizualizaci datového objektu v rozhraní ladicího programu potřebujete kód pro komunikaci mezi těmito dvěma procesy. Architektura vizualizéru se proto skládá ze dvou částí: kódu na straně ladicího programu a kódu na straně ladění.
Kód na straně ladicího programu vytvoří vlastní uživatelské rozhraní, které lze vyvolat z rozhraní ladicího programu, jako je například DataTip, Okno kukátka nebo QuickWatch. Rozhraní vizualizéru je vytvořeno pomocí DialogDebuggerVisualizer třídy a IDialogVisualizerService rozhraní. Stejně jako všechna rozhraní API vizualizéru, DialogDebuggerVisualizer a IDialogVisualizerService se nacházejí v Microsoft.VisualStudio.DebuggerVisualizers oboru názvů.
Ladicí program – strana | Ladicí strana |
---|---|
DialogDebuggerVisualizer – třída IDialogVisualizerService – rozhraní |
Datový objekt |
Uživatelské rozhraní získá data, která se mají vizualizovat zprostředkovatele objektů, který existuje na straně ladicího programu:
Ladicí program – strana | Ladicí strana |
---|---|
DialogDebuggerVisualizer – třída IDialogVisualizerService – rozhraní |
Datový objekt |
Zprostředkovatel objektů (implementuje IVisualizerObjectProvider) |
Na straně ladicího programu je odpovídající objekt s názvem Zdroj objektu:
Ladicí program – strana | Ladicí strana |
---|---|
DialogDebuggerVisualizer – třída IDialogVisualizerService – rozhraní |
Datový objekt |
Zprostředkovatel objektů (implementuje IVisualizerObjectProvider) | Zdroj objektů (odvozený z VisualizerObjectSource) |
Zprostředkovatel objektů poskytuje data objektu, která se mají vizualizovat v uživatelském rozhraní vizualizéru. Zprostředkovatel objektu získá data objektu ze zdroje objektů. Zprostředkovatel objektů a zdroj objektů poskytují rozhraní API pro komunikaci dat objektu mezi stranou ladicího programu a stranou ladicího programu.
Každý vizualizér musí získat datový objekt, který má být vizualizován. Následující tabulka ukazuje odpovídající rozhraní API, která pro tento účel používají zprostředkovatel objektů a zdroj objektů:
Zprostředkovatel objektů | Zdroj objektů |
---|---|
GetData —nebo— GetObject |
GetData |
Všimněte si, že zprostředkovatel objektu může použít buď GetData nebo GetObject. Výsledkem obou rozhraní API je volání GetData zdroje objektů. Volání, které Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData vyplní , System.IO.Streamkterý představuje serializovanou formu objektu, který je vizualizován.
Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject deserializuje data zpět do objektového formuláře, který pak můžete zobrazit v uživatelském rozhraní, pomocí DialogDebuggerVisualizerkterého vytvoříte . Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData vyplní data jako nezpracovaný Stream
, který musíte deserializovat sami. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject funguje voláním Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData získat serializované Stream
, pak deserializace dat. Použijte Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData , pokud objekt není serializovatelný rozhraním .NET a vyžaduje vlastní serializaci. V takovém případě musíte také přepsat metodu Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.Serialize .
Pokud vytváříte vizualizér jen pro čtení, jednosměrná komunikace s vizualizérem GetData nebo GetObject je dostatečná. Pokud vytváříte vizualizér, který podporuje úpravy datových objektů, musíte udělat víc. Musíte být schopni odeslat datový objekt ze zprostředkovatele objektu zpět do zdroje objektů. Následující tabulka ukazuje rozhraní API zprostředkovatele objektů a zdrojového objektu, která se používají k tomuto účelu:
Zprostředkovatel objektů | Zdroj objektů |
---|---|
ReplaceData —nebo— ReplaceObject |
CreateReplacementObject |
Znovu si všimněte, že existují dvě rozhraní API, která může použít zprostředkovatel objektů. Data se vždy odesílají ze zprostředkovatele objektu do zdroje objektu jako Stream
objekt , ale ReplaceData vyžadují, abyste objekt serializovali do Stream
sebe.
ReplaceObject vezme objekt, který zadáte, serializuje jej do , Stream
pak volání ReplaceData odeslat Stream
do CreateReplacementObject.
Pomocí jedné z metod Replace vytvoří nový datový objekt v ladicím programu, který nahradí vizualizovaný objekt. Pokud chcete změnit obsah původního objektu bez nahrazení, použijte jednu z metod transferu zobrazenou v následující tabulce. Tato rozhraní API přenášejí data v obou směrech současně bez nahrazení vizualizovaného objektu:
Zprostředkovatel objektů | Zdroj objektů |
---|---|
TransferData —nebo— TransferObject |
TransferData |