Sdílet prostřednictvím


Architektura vizualizéru

Architektura debugger vizualizéru má dvě části:

  • Na straně ladicího programu sady Visual Studio se spustí ladicí program. Kód ladicího programu vytvoří a zobrazí uživatelské rozhraní pro váš vizualizér.

  • 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ý je laděn (proces debuggee). 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 (DataTips, Okno sledování, Rychlé sledování) 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ého programu.

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 sledování 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ů.

Debugger Stránka Strana laděného programu
DialogDebuggerVisualizer třída

Rozhraní IDialogVisualizerService
Datový objekt

Uživatelské rozhraní přijímá data, která se mají vizualizovat, od Poskytovatele Objektů, který existuje na straně ladicího programu.

Debugger rozhraní Strana laděného
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:

Debugger – část Strana laděného programu
Třída DialogDebuggerVisualizer

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 objektů mezi stranou ladicího programu a stranou programu pro ladění.

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í na Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData vyplní System.IO.Stream, který představuje serializovanou formu vizualizovaného objektu.

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 k získání serializovaného Stream, a poté deserializuje data. 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, ale ReplaceData vyžadují, abyste objekt serializovali do Stream.

ReplaceObject vezme objekt, který zadáte, serializuje jej do Stream, pak zavolá ReplaceData, aby odeslal 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