視覺化檢視架構

這個主題適用於:

版本

Visual Basic

C#

F#

C++

Web Developer

Express

標題適用於 標題適用於 標題適用於

僅限 Managed

標題適用於

Pro、Premium 和 Ultimate

標題適用於 標題適用於 標題適用於

僅限 Managed

標題適用於

偵錯工具視覺化檢視的架構分為兩部分:

  • 「偵錯工具端」(Debugger Side) 會在 Visual Studio 偵錯工具中執行。 偵錯工具端的程式碼會建立並顯示視覺化檢視的使用者介面。

  • 「偵錯項目端」(Debuggee Side) 會在 Visual Studio 正在偵錯的處理序 (亦即「偵錯項目」(Debuggee)) 中執行。

視覺化檢視是偵錯工具的一個元件,它讓偵錯工具可以用有意義、容易了解的形式,顯示 (「視覺化」(Visualize)) 資料物件的內容。 有些視覺化檢視也支援編輯資料物件。 您可以撰寫自訂的視覺化檢視,來將偵錯工具擴充成可以處理自己的自訂資料型別。

要視覺化的資料物件位於所偵錯的處理序 (「偵錯項目」(Debuggee) 處理序) 內。 即將顯示資料的使用者介面則在 Visual Studio 偵錯工具處理序內建立:

偵錯工具處理序

偵錯項目處理序

偵錯工具使用者介面 (資料提示方塊、監看式視窗、快速監看式)

要視覺化的資料物件

若要在偵錯工具介面中將資料物件視覺化,您必須編寫兩個處理序之間的通訊程式碼。 因此,視覺化檢視架構分為兩部分:「偵錯工具端」(Debugger Side) 程式碼和「偵錯項目端」(Debuggee Side) 程式碼。

偵錯工具端程式碼會建立自己的使用者介面,供您從偵錯工具介面 (例如,資料提示方塊、監看式視窗或快速監看式) 中叫用。 建立視覺化檢視介面是使用 DialogDebuggerVisualizer 類別和 IDialogVisualizerService 介面。 DialogDebuggerVisualizer 和 IDialogVisualizerService 跟所有視覺化檢視 API 一樣位於 Microsoft.VisualStudio.DebuggerVisualizers 命名空間中。

偵錯工具端

偵錯項目端

DialogDebuggerVisualizer 類別

IDialogVisualizerService 介面

資料物件

使用者介面會從偵錯工具端上的物件提供者處取得要視覺化的資料:

偵錯工具端

偵錯項目端

DialogDebuggerVisualizer 類別

IDialogVisualizerService 介面

資料物件

物件提供者 (實作 IVisualizerObjectProvider)

偵錯項目端有對應的物件,稱為物件來源:

偵錯工具端

偵錯項目端

DialogDebuggerVisualizer 類別

IDialogVisualizerService 介面

資料物件

物件提供者 (實作 IVisualizerObjectProvider)

物件來源 (衍生自 VisualizerObjectSource)

物件提供者會將要視覺化的物件資料提供給視覺化檢視 UI。 物件提供者是從物件來源處取得物件資料。 物件提供者和物件來源會提供 API,讓偵錯工具端和偵錯項目端之間能夠溝通物件資料。

每個視覺化檢視必須取得要視覺化的資料物件。 下表顯示物件提供者和物件來源在這個用途上對應的 API:

物件提供者

物件來源

GetData

-或-

GetObject

GetData

請注意,物件提供者可以使用 GetDataGetObject 兩者之一。 這兩個 API 都會導致對物件來源呼叫 GetData。 呼叫 VisualizerObjectSource.GetData 會填入 [System.IO.Stream],以代表所視覺化物件的序列化形式。

IVisualizerObjectProvider.GetObject 會將資料還原序列化回物件形式,讓您可以將它顯示在用 DialogDebuggerVisualizer 所建立的 UI 中。 IVisualizerObjectProvider.GetData 會以原始 [System.IO.Stream] 來填入資料,您必須自行將資料還原序列化。 IVisualizerObjectProvider.GetObject 的運作方式是先呼叫 IVisualizerObjectProvider.GetData 來取得序列化 [System.IO.Stream],然後將資料還原序列化。 若 .NET 未將物件序列化,或需要自訂序列化,請使用 IVisualizerObjectProvider.GetData。 在這種情況下,您也必須覆寫 VisualizerObjectSource.Serialize 方法。

如果您建立的是唯讀的視覺化檢視,則與 GetDataGetObject 之間只要有單向通訊就已足夠。 如果所建立的視覺化檢視支援編輯資料物件,就必須多執行其他動作。 您還必須能夠將資料物件從物件提供者傳送回物件來源。 下表顯示做這個用途的物件提供者和物件來源 API:

物件提供者

物件來源

ReplaceData

-或-

ReplaceObject

CreateReplacementObject

請注意,物件提供者同樣可以使用兩個 API。 資料始終是以 [System.IO.Stream] 形式從物件提供者傳送到物件來源,但 ReplaceData 需要您自行將物件序列化成 [System.IO.Stream]。

ReplaceObject 會接受您提供的物件,將它序列化成 [System.IO.Stream],然後呼叫 ReplaceData 以將 [System.IO.Stream] 傳送到 CreateReplacementObject

若使用兩個 Replace 方法中的任一個,便會在偵錯項目中建立新的資料物件,以取代所視覺化的物件。 如果要變更原始物件的內容,卻不要取代它,請使用下表所示的其中一個 Transfer 方法。 這些 API 會同時雙向傳輸資料,不會取代所視覺化的物件:

物件提供者

物件來源

TransferData

-或-

TransferObject

TransferData

請參閱

工作

HOW TO:撰寫視覺化檢視

逐步解說:在 C# 中撰寫視覺化檢視

逐步解說:在 Visual Basic 中撰寫視覺化檢視

逐步解說:在 Visual Basic 中撰寫視覺化檢視

概念

視覺化檢視安全性考量