Arsitektur Visualizer
Arsitektur visualizer debugger memiliki dua bagian:
Sisi debugger berjalan dalam debugger Visual Studio. Kode sisi debugger membuat dan menampilkan antarmuka pengguna untuk visualizer Anda.
Sisi debuggee yang berjalan dalam proses Visual Studio adalah penelusuran kesalahan (debuggee).
Visualizer adalah komponen debugger yang memungkinkan debugger menampilkan (memvisualisasikan) konten objek data dalam bentuk yang bermakna dan dapat dimengerti. Beberapa visualizer juga mendukung pengeditan objek data. Dengan menulis visualizer kustom, Anda dapat memperluas debugger untuk menangani jenis data kustom Anda sendiri.
Objek data yang akan divisualisasikan berada dalam proses yang Anda debug (proses debuggee ). Antarmuka pengguna yang akan menampilkan data dibuat dalam proses debugger Visual Studio:
Proses Debugger | Proses Debuggee |
---|---|
Antarmuka pengguna Debugger (DataTips, Jendela Pengawasan, QuickWatch) | Objek Data yang akan divisualisasikan |
Untuk memvisualisasikan objek data dalam antarmuka debugger, Anda memerlukan kode untuk berkomunikasi di antara kedua proses. Akibatnya, arsitektur visualizer terdiri dari dua bagian: kode sisi debugger dan kode sisi debuggee.
Kode sisi debugger membuat antarmuka penggunanya sendiri, yang dapat dipanggil dari antarmuka debugger, seperti DataTip, Jendela Pengawasan, atau QuickWatch. Antarmuka visualizer dibuat dengan menggunakan kelas DialogDebuggerVisualizer dan antarmuka IDialogVisualizerService. Seperti semua API Visualizer, DialogDebuggerVisualizer dan IDialogVisualizerService ditemukan di namespace Microsoft.VisualStudio.DebuggerVisualizers.
Sisi Debugger | Sisi Debuggee |
---|---|
Kelas DialogDebuggerVisualizer Antarmuka IDialogVisualizerService |
Objek Data |
Antarmuka pengguna mendapatkan data untuk divisualisasikan dari Penyedia Objek, yang ada di sisi debugger:
Sisi Debugger | Sisi Debuggee |
---|---|
Kelas DialogDebuggerVisualizer Antarmuka IDialogVisualizerService |
Objek Data |
Penyedia Objek (mengimplementasikan IVisualizerObjectProvider) |
Ada objek yang sesuai di sisi debuggee yang disebut Sumber Objek:
Sisi Debugger | Sisi Debuggee |
---|---|
Kelas DialogDebuggerVisualizer Antarmuka IDialogVisualizerService |
Objek Data |
Penyedia Objek (mengimplementasikan IVisualizerObjectProvider) | Sumber Objek (berasal dari VisualizerObjectSource) |
Penyedia Objek menyediakan data objek yang akan divisualisasikan ke antarmuka pengguna visualizer. Penyedia Objek mendapatkan data objek dari Sumber Objek. Penyedia Objek dan Sumber Objek menyediakan API untuk mengomunikasikan data objek antara sisi debugger dan sisi debuggee.
Setiap visualizer harus mendapatkan objek data untuk divisualisasikan. Tabel berikut ini menampilkan API terkait yang digunakan Penyedia Objek dan Sumber Objek untuk tujuan ini:
Penyedia Objek | Sumber Objek |
---|---|
GetData —atau— GetObject |
GetData |
Perhatikan bahwa penyedia objek dapat menggunakan GetData atau GetObject. Salah satu API menghasilkan panggilan ke GetData pada Sumber Objek. Panggilan ke Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData mengisi System.IO.Stream, yang mewakili bentuk serial objek yang sedang divisualisasikan.
Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject mendeserialisasi data kembali ke formulir objek, yang kemudian dapat Anda tampilkan di antarmuka pengguna yang Anda buat dengan DialogDebuggerVisualizer. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData mengisi data sebagai mentah Stream
, yang harus Anda deserialisasi sendiri. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject bekerja dengan memanggil Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData untuk mendapatkan serialisasi Stream
, lalu mendeserialisasi data. Gunakan Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData saat objek tidak dapat diserialisasikan oleh .NET dan memerlukan serialisasi kustom. Dalam hal ini, Anda juga harus mengambil alih metode Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.Serialize.
Jika Anda membuat visualizer baca-saja, komunikasi satu arah dengan GetData atau GetObject sudah cukup. Jika Anda membuat visualizer yang mendukung pengeditan objek data, Anda harus melakukan lebih banyak hal. Anda harus dapat mengirim objek data dari Penyedia Objek kembali ke Sumber Objek juga. Tabel berikut ini menunjukkan Penyedia Objek dan API Sumber Objek yang digunakan untuk tujuan ini:
Penyedia Objek | Sumber Objek |
---|---|
ReplaceData —atau— ReplaceObject |
CreateReplacementObject |
Perhatikan, sekali lagi, bahwa ada dua API yang dapat digunakan Oleh Penyedia Objek. Data selalu dikirim dari Penyedia Objek ke Sumber Objek sebagai Stream
, tetapi ReplaceData mengharuskan Anda membuat serialisasi objek ke dalam Stream
sendiri.
ReplaceObject mengambil objek yang Anda berikan, menserialisasikannya ke dalam Stream
, lalu memanggil ReplaceData untuk mengirim Stream
ke CreateReplacementObject.
Menggunakan salah satu metode Ganti membuat objek data baru di debuggee yang menggantikan objek yang sedang divisualisasikan. Jika Anda ingin mengubah konten objek asli tanpa menggantinya, gunakan salah satu metode Transfer yang diperlihatkan dalam tabel berikut. API ini mentransfer data ke kedua arah secara bersamaan, tanpa mengganti objek yang sedang divisualisasikan:
Penyedia Objek | Sumber Objek |
---|---|
TransferData —atau— TransferObject |
TransferData |