Aracılığıyla paylaş


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 (DataTips, 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 DialogDebuggerVisualizer sınıfı ve IDialogVisualizerService arabirimi kullanılarak 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ı Bölümü Hata Ayıklanan Taraf
DialogDebuggerVisualizer Sınıfı

IDialogVisualizerService arabirimi
Veri Nesnesi
Nesne Sağlayıcısı (uygular IVisualizerObjectProvider) VisualizerObjectSource Kaynağından türetilmiş Nesne

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ştirme aracı, 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 ya GetData veya GetObject kullanabileceğine dikkat edin. Her iki API de Nesne Kaynağı'ndaki GetData çağrısı ile sonuçlanır. Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData öğesine yapılan bir çağrı, görselleştirilmekte olan nesnenin serileştirilmiş bir biçimini temsil eden bir System.IO.Stream'i doldurur.

Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject verileri seri durumdan çıkarıp nesne biçimine dönüştürerek, DialogDebuggerVisualizer ile oluş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.GetObject, Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData çağırarak Stream'yi serileştirilmiş hâlde 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, Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.Serialize yöntemini de geçersiz kılmanız gerekir.

Bir salt okunur görselleştirici oluşturuyorsanız, GetData veya GetObject ile 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.

ReplaceObject sağladığınız bir nesneyi alır, serileştirir ve ardından Stream öğesini CreateReplacementObject adresine göndermek için ReplaceData'yi çağırır.

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