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 Stream
olarak doldurur ve bu durumda kendi seri durumdan çıkarmanız gerekir. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObjectserileştirilmiş Stream
almak 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 Stream
gö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 |