Görselleştirici Mimarisi

Hata ayıklayıcı görselleştiricisinin mimarisinin iki bölümü vardır:

  • Hata ayıklayıcısı tarafı Visual Studio hata ayıklayıcı içinde çalışır. Hata ayıklayıcı tarafı kodu, görselleştiriciniz için kullanıcı arabirimini oluşturur ve görüntüler.

  • Debuggee tarafı, Visual Studio'da hata ayıklama işlemi içinde çalışır (debuggee).

    Görselleştirici, hata ayıklayıcının bir veri nesnesinin içeriğini anlamlı, anlaşılır bir biçimde görüntülemesini (görselleştirmesini) sağlayan bir hata ayıklayıcısı bileşenidir. Bazı görselleştiriciler veri nesnesinin düzenlenmesini de destekler. Özel görselleştiriciler yazarak hata ayıklayıcısını kendi özel veri türlerinizi işleyecek şekilde genişletebilirsiniz.

    Görselleştirilecek veri nesnesi, hata ayıklama işleminiz ( debuggee işlemi) içinde yer alır. Verileri görüntüleyecek kullanıcı arabirimi Visual Studio hata ayıklayıcı işlemi içinde oluşturulur:

Hata Ayıklayıcı İşlemi Hata Ayıklama işlemi
Hata ayıklayıcısı kullanıcı arabirimi (Data İpuçları, Watch Window, QuickWatch) Görselleştirilecek Veri Nesnesi

Hata ayıklayıcısı arabirimindeki veri nesnesini görselleştirmek için, iki işlem arasında iletişim kurmak için kod gerekir. Sonuç olarak, görselleştirici mimarisi iki bölümden oluşur: hata ayıklayıcı tarafı kodu ve hata ayıklamaya yönelik yan kod.

Hata ayıklayıcı tarafı kodu, Veri İpucu, İzleme Penceresi veya QuickWatch gibi hata ayıklayıcı arabiriminden çağrılabilen kendi kullanıcı arabirimini oluşturur. Görselleştirici arabirimi sınıfı ve IDialogVisualizerService arabirimi kullanılarak DialogDebuggerVisualizer oluşturulur. Tüm Görselleştirici API'leri gibi DialogDebuggerVisualizer ve IDialogVisualizerService de ad alanında Microsoft.VisualStudio.DebuggerVisualizers bulunur.

Hata Ayıklayıcı Tarafı Debuggee Tarafı
DialogDebuggerVisualizer Sınıfı

IDialogVisualizerService Arabirimi
Veri Nesnesi

Kullanıcı arabirimi, hata ayıklayıcı tarafında bulunan bir Nesne Sağlayıcısından görselleştirilecek verileri alır:

Hata Ayıklayıcı Tarafı Debuggee Tarafı
DialogDebuggerVisualizer Sınıfı

IDialogVisualizerService Arabirimi
Veri Nesnesi
Nesne Sağlayıcısı (uygular IVisualizerObjectProvider)

Hata ayıklama tarafında Nesne Kaynağı adlı karşılık gelen bir nesne vardır:

Hata Ayıklayıcı Tarafı Debuggee Tarafı
DialogDebuggerVisualizer Sınıfı

IDialogVisualizerService Arabirimi
Veri Nesnesi
Nesne Sağlayıcısı (uygular IVisualizerObjectProvider) Nesne Kaynağı (öğesinden VisualizerObjectSourcetüretilir)

Nesne Sağlayıcısı, görselleştirici kullanıcı arabiriminde görselleştirilecek nesne verilerini sağlar. Nesne Sağlayıcısı nesne verilerini Nesne Kaynağı'ndan alır. Nesne Sağlayıcısı ve Nesne Kaynağı, nesne verilerini hata ayıklayıcı tarafıyla hata ayıklayıcı tarafı arasında iletmek için API'ler sağlar.

Her görselleştirici, görselleştirilecek veri nesnesini almalıdır. Aşağıdaki tabloda, Nesne Sağlayıcısı ve Nesne Kaynağı'nın bu amaçla kullandığı ilgili API'ler gösterilmektedir:

Nesne Sağlayıcısı Nesne Kaynağı
GetData

—veya—

GetObject
GetData

Nesne sağlayıcısının veya GetObjectkullanabileceğine GetData dikkat edin. HER iki API de Nesne Kaynağı'nda çağrısıyla GetData sonuç alır. Görselleştirilmekte olan nesnenin serileştirilmiş bir biçimini temsil eden bir System.IO.Streamöğesini doldurma çağrısıMicrosoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData.

Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject verileri nesne biçiminde seri durumdan çıkararak ile DialogDebuggerVisualizeroluşturduğunuz kullanıcı arabiriminde görüntüleyebilirsiniz. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData verileri ham Streamolarak doldurur ve bu durumda kendi seri durumdan çıkarmanız gerekir. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObjectserileştirilmiş Streamalmak için çağırarak Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData çalışır ve ardından verileri seri durumdan çıkarır. Nesne .NET tarafından serileştirilebilir olmadığında ve özel serileştirme gerektirdiğinde kullanın Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData . Bu durumda, yöntemini de geçersiz kılmanız Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.Serialize gerekir.

Salt okunur görselleştirici oluşturuyorsanız veya GetObject ile GetData tek yönlü iletişim yeterlidir. Veri nesnelerinin düzenlenmesini destekleyen bir görselleştirici oluşturuyorsanız, daha fazlasını yapmalısınız. Bir veri nesnesini Nesne Sağlayıcısı'ndan Nesne Kaynağına da gönderebilmeniz gerekir. Aşağıdaki tabloda, bu amaç için kullanılan Nesne Sağlayıcısı ve Nesne Kaynağı API'leri gösterilmektedir:

Nesne Sağlayıcısı Nesne Kaynağı
ReplaceData

—veya—

ReplaceObject
CreateReplacementObject

Nesne Sağlayıcısı'nın kullanabileceği iki API olduğuna dikkat edin. Veriler her zaman Nesne Sağlayıcısı'ndan Nesne Kaynağı'na olarak Streamgönderilir, ancak ReplaceData nesneyi Stream kendi içinde seri hale getirmenizi gerektirir.

ReplaceObjectsağladığınız bir nesneyi alır, içinde serileştirirStream, ardından öğesini adresine göndermek Stream için CreateReplacementObjectöğesini çağırırReplaceData.

Replace yöntemlerinden birinin kullanılması debuggee içinde görselleştirilmekte olan nesnenin yerini alan yeni bir veri nesnesi oluşturur. Özgün nesnenin içeriğini değiştirmeden değiştirmek istiyorsanız, aşağıdaki tabloda gösterilen Aktarım yöntemlerinden birini kullanın. Bu API'ler, görselleştirilmekte olan nesneyi değiştirmeden verileri aynı anda her iki yönde de aktarır:

Nesne Sağlayıcısı Nesne Kaynağı
TransferData

—veya—

TransferObject
TransferData