視覺化檢視架構
更新:2007 年 11 月
這個主題適用於:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express 版 |
僅限 Managed |
|||
Standard 版 |
僅限 Managed |
|||
Pro/Team 版 |
僅限 Managed |
表格圖例:
套用 |
|
不套用 |
|
預設隱藏的命令。 |
偵錯工具視覺化檢視的架構分為兩部分:
偵錯工具端會在 Visual Studio 偵錯工具中執行。偵錯工具端的程式碼會建立並顯示視覺化檢視的使用者介面。
偵錯項目端會在 Visual Studio 正在偵錯的處理序 (亦即偵錯項目) 中執行。
視覺化檢視是偵錯工具的一個元件,它讓偵錯工具可以用有意義、容易了解的形式,顯示 (視覺化) 資料物件的內容。有些視覺化檢視也支援編輯資料物件。您可以撰寫自訂的視覺化檢視,來將偵錯工具擴充成可以處理自己的自訂資料型別。
要視覺化的資料物件位於所偵錯的處理序 (偵錯項目處理序) 內。即將顯示資料的使用者介面則在 Visual Studio 偵錯工具處理序內建立:
偵錯工具處理序 |
偵錯項目處理序 |
---|---|
偵錯工具使用者介面 (資料提示方塊、監看式視窗、快速監看式) |
要視覺化的資料物件 |
若要在偵錯工具介面中將資料物件視覺化,您必須編寫兩個處理序之間的通訊程式碼。因此,視覺化檢視架構分為兩部分:偵錯工具端程式碼和偵錯項目端程式碼。
偵錯工具端程式碼會建立自己的使用者介面,供您從偵錯工具介面 (例如,資料提示方塊、監看式視窗或快速監看式) 中叫用。建立視覺化檢視介面是使用 DialogDebuggerVisualizer 類別和 IDialogVisualizerService 介面。DialogDebuggerVisualizer 和 IDialogVisualizerService 跟所有視覺化檢視 API 一樣位於 Microsoft.VisualStudio.DebuggerVisualizers 命名空間中。
偵錯工具端 |
偵錯項目端 |
---|---|
DialogDebuggerVisualizer 類別 IDialogVisualizerService 介面 |
資料物件 |
使用者介面會從偵錯工具端上的物件提供者處取得要視覺化的資料:
偵錯工具端 |
偵錯項目端 |
---|---|
DialogDebuggerVisualizer 類別 IDialogVisualizerService 介面 |
資料物件 |
物件提供者 (實作 IVisualizerObjectProvider) |
偵錯項目端有對應的物件,稱為物件來源:
偵錯工具端 |
偵錯項目端 |
---|---|
DialogDebuggerVisualizer 類別 IDialogVisualizerService 介面 |
資料物件 |
物件提供者 (實作 IVisualizerObjectProvider) |
物件來源 (衍生自 VisualizerObjectSource) |
物件提供者會將要視覺化的物件資料提供給視覺化檢視 UI。物件提供者是從物件來源處取得物件資料。物件提供者和物件來源會提供 API,讓偵錯工具端和偵錯項目端之間能夠溝通物件資料。
每個視覺化檢視必須取得要視覺化的資料物件。下表顯示物件提供者和物件來源在這個用途上對應的 API:
物件提供者 |
物件來源 |
---|---|
- 或 - |
請注意,物件提供者可以使用 GetData 或 GetObject 兩者之一。這兩個 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 方法。如需可序列化之項目的完整討論,請參閱序列化。
如果您建立的是唯讀的視覺化檢視,則與 GetData 或 GetObject 之間只要有單向通訊就已足夠。如果所建立的視覺化檢視支援編輯資料物件,就必須多執行其他動作。您還必須能夠將資料物件從物件提供者傳送回物件來源。下表顯示做這個用途的物件提供者和物件來源 API:
物件提供者 |
物件來源 |
---|---|
- 或 - |
請注意,物件提供者同樣可以使用兩個 API。資料始終是以 [System.IO.Stream] 形式從物件提供者傳送到物件來源,但 ReplaceData 需要您自行將物件序列化成 [System.IO.Stream]。
ReplaceObject 會接受您提供的物件,將它序列化成 [System.IO.Stream],然後呼叫 ReplaceData 以將 [System.IO.Stream] 傳送到 CreateReplacementObject。
若使用兩個 Replace 方法中的任一個,便會在偵錯項目中建立新的資料物件,以取代所視覺化的物件。如果要變更原始物件的內容,卻不要取代它,請使用下表所示的其中一個 Transfer 方法。這些 API 會同時雙向傳輸資料,不會取代所視覺化的物件:
物件提供者 |
物件來源 |
---|---|
- 或 - |