Visual Studio hata ayıklayıcısı (.NET) için özel veri görselleştiricileri
Önemli
Visual Studio 2022 sürüm 17.9'dan başlayarak, görselleştiriciler artık yeni VisualStudio.Genişletilebilirlik modeli kullanılarak işlem dışı çalışan .NET 6.0+ dilinde yazılabilir. Visual Studio'nun eski sürümlerini desteklemek veya özel görselleştiricilerini bir kitaplık DLL'sinin parçası olarak göndermek istemedikleri sürece görselleştirici yazarlarının Visual Studio hata ayıklayıcısı görselleştiricileri oluşturma bölümündeki yeni belgelere başvurmalarını öneririz.
Görselleştirici, bir değişkeni veya nesneyi veri türüne uygun şekilde görüntüleyen Visual Studio hata ayıklayıcısı kullanıcı arabiriminin bir parçasıdır. Örneğin, bit eşlem görselleştiricisi bit eşlem yapısını yorumlar ve temsil ettiği grafiği görüntüler. Bazı görselleştiriciler verileri değiştirmenize ve görüntülemenize olanak sağlar. Hata ayıklayıcıda görselleştirici büyüteç simgesiyle gösterilir. Bir DataTip, hata ayıklayıcısı İzleme penceresi veya QuickWatch iletişim kutusunda simgeyi seçebilir ve ardından ilgili nesne için uygun görselleştiriciyi seçebilirsiniz.
Standart yerleşik görselleştiricilere ek olarak Microsoft, üçüncü taraflar ve topluluktan daha fazla görselleştirici indirilebilir. Ayrıca kendi görselleştiricilerinizi yazabilir ve Visual Studio hata ayıklayıcısına yükleyebilirsiniz.
Bu makalede görselleştirici oluşturmaya yönelik üst düzey bir genel bakış sunulmaktadır. Ayrıntılı yönergeler için bunun yerine aşağıdaki makalelere bakın:
- İzlenecek yol: C# ile görselleştirici yazma
- İzlenecek yol: Visual Basic'te görselleştirici yazma
- Görselleştirici yükleme
- Natvis belgelerinde UIVisualizer öğesine bakın. Ayrıca bkz . Yerel Hata Ayıklayıcı Görselleştiricisi SQLite örneği.
Not
özel görselleştiriciler Evrensel Windows Platformu (UWP) ve Windows 8.x uygulamaları için desteklenmez.
Genel bakış
ve Arraydışında herhangi bir yönetilen sınıfın nesnesi için Object özel görselleştirici yazabilirsiniz.
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ısı içinde çalışır ve görselleştirici kullanıcı arabirimini oluşturur ve görüntüler.
Visual Studio .NET Framework Çalışma Zamanı'nda yürütülürken, bu bileşenin .NET Framework için yazılması gerekir. Bu nedenle.NET Core için yazmak mümkün değildir.
Debuggee tarafı, Visual Studio'da hata ayıklama işlemi içinde çalışır (debuggee). Görselleştirmek için veri nesnesi (örneğin, bir Dize nesnesi) debuggee işleminde bulunur. Debuggee tarafı, nesneyi oluşturduğunuz kullanıcı arabiriminde görüntüleyen hata ayıklayıcı tarafına gönderir.
Bu bileşeni oluşturduğunuz çalışma zamanı, hata ayıklama işleminin çalıştırılacağı çalışma zamanıyla (.NET Framework veya .NET Core) eşleşmelidir.
Hata ayıklayıcı tarafı, arabirimini uygulayan IVisualizerObjectProvider bir nesne sağlayıcısından veri nesnesini alır. Debuggee tarafı, nesnesini öğesinden VisualizerObjectSourcetüretilen nesne kaynağı üzerinden gönderir.
Nesne sağlayıcısı, verileri düzenleyebilen bir görselleştirici yazmanızı sağlayan nesne kaynağına da veri gönderebilir. İfade değerlendiricisi ve nesne kaynağıyla konuşmak için nesne sağlayıcısını geçersiz kılarsınız.
Debuggee tarafı ve hata ayıklayıcı tarafı, bir veri nesnesini seri hale getiren ve veri nesnesine Stream geri seri durumdan Stream çıkaran yöntemler aracılığıyla Stream birbirleriyle iletişim kurar.
Genel bir tür için görselleştirici yazabilmeniz için, türün açık bir tür olması gerekir. Bu kısıtlama, özniteliğini kullanırkenki kısıtlamayla DebuggerTypeProxy
aynıdır. Ayrıntılar için bkz . DebuggerTypeProxy özniteliğini kullanma.
Özel görselleştiricilerin güvenlikle ilgili önemli noktaları olabilir. Bkz. Görselleştirici güvenlik konuları.
Hata ayıklayıcı tarafı kullanıcı arabirimini oluşturma
Hata ayıklayıcısı tarafında görselleştirici kullanıcı arabirimini oluşturmak için, öğesinden DialogDebuggerVisualizerdevralan bir sınıf oluşturur ve arabirimini görüntülemek için yöntemini geçersiz kılarsınız Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer.Show . Görselleştiricinizde Windows formlarını, iletişim kutularını ve denetimleri görüntülemek için kullanabilirsiniz IDialogVisualizerService .
Hata ayıklayıcı tarafında görselleştirilmiş nesneyi almak için yöntemleri kullanın IVisualizerObjectProvider .
öğesinden DialogDebuggerVisualizerdevralan bir sınıf oluşturun.
Not
Visual Studio 2022 sürüm 17.11'den başlayarak aşağıdaki bölümde açıklanan güvenlik sorunları nedeniyle, görselleştiriciler temel sınıfın Legacy
oluşturucusunda biçimlendirici ilkesini belirtemez. Görselleştiriciler bundan sonra yalnızca JSON serileştirmesini kullanarak hata ayıklayıcı ile hata ayıklamaya yönelik bileşenler arasında iletişim kurabilir.
Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer.Show Arabiriminizi görüntülemek için yöntemini geçersiz kılın. Windows formlarını, iletişim kutularını ve denetimleri arabiriminizde görüntülemek için yöntemleri kullanın IDialogVisualizerService .
uygulamasını uygulayın DebuggerVisualizerAttributeve görüntülenecek görselleştiriciyi (DialogDebuggerVisualizer verir).
.NET 5.0+ için özel hata ayıklayıcısı tarafında dikkat edilmesi gerekenler
Özel Görselleştiriciler, varsayılan olarak sınıfını kullanarak BinaryFormatter ikili serileştirme aracılığıyla hata ayıklayıcı ile hata ayıklayıcı tarafı arasında veri aktarır. Ancak, düzeltilemez güvenlik açıklarıyla ilgili güvenlik endişeleri nedeniyle bu tür bir serileştirme .NET 5 ve üzerinde engellenmektedir. Ayrıca, ASP.NET Core 5'te tamamen kullanım dışı olarak işaretlendi ve kullanımı ASP.NET Core Belgeleri'nde açıklandığı gibi atılacak. Bu bölümde, görselleştiricinizin bu senaryoda hala desteklendiğinden emin olmak için gerçekleştirmeniz gereken adımlar açıklanmaktadır.
Uyumluluk nedenleriyle, Show önceki bölümde geçersiz kılınan yöntem yine de içinde IVisualizerObjectProvideralır. Ancak, Visual Studio 2019 sürüm 16.10'dan başlayarak, aslında türündedir IVisualizerObjectProvider3. Bu nedenle,
objectProvider
nesnesini güncelleştirilmiş arabirime yayın.Komutlar veya veriler gibi nesneleri hata ayıklamaya gönderirken, bir akışa geçirmek için yöntemini kullanın
IVisualizerObjectProvider2.Serialize
, hata ayıklama işlemi çalışma zamanına göre kullanılacak en iyi serileştirme biçimini belirler. Ardından akışı yöntemineIVisualizerObjectProvider2.TransferData
geçirin.Debuggee-side görselleştirici bileşeninin hata ayıklayıcı tarafına herhangi bir şey döndürmesi gerekiyorsa, yöntemi tarafından TransferData döndürülen nesnede Stream bulunur.
IVisualizerObjectProvider2.GetDeserializableObjectFrom
Bir örneği almak IDeserializableObject ve gerektiği gibi işlemek için yöntemini kullanın veya seri durumdan nasıl çıkarabileceğinizi bildiğiniz bir türse kullanınDeserializeFromJson.
İkili Serileştirme kullanılırken hata ayıklamaya ilişkin diğer değişikliklerin desteklenmediğini öğrenmek için lütfen .NET 5.0+ için özel hata ayıklamaya yönelik hata ayıklama tarafı konuları bölümüne bakın.
Debuggee tarafı için görselleştirici nesne kaynağını oluşturma
Hata ayıklayıcısı yan kodunda, öğesini düzenleyerek DebuggerVisualizerAttributegörselleştirilecek tür (hata ayıklamaya neden olan nesne kaynağı) ()VisualizerObjectSource sağlayın. Target
özelliği nesne kaynağını ayarlar. Nesne kaynağını atlarsanız görselleştirici varsayılan nesne kaynağını kullanır.
Debuggee yan kodu, görselleştirilen nesne kaynağını içerir. Veri nesnesi yöntemlerini VisualizerObjectSourcegeçersiz kılabilir. Tek başına bir görselleştirici oluşturmak istiyorsanız hata ayıklama işlemi tarafı DLL gereklidir.
Debuggee-side kodunda:
Görselleştiricinin veri nesnelerini düzenlemesine izin vermek için nesne kaynağının veya
CreateReplacementObject
yöntemlerini devralması VisualizerObjectSource ve geçersiz kılmasıTransferData
gerekir.Görselleştiricinizde çoklu hedeflemeyi desteklemeniz gerekiyorsa, debuggee-side proje dosyasında aşağıdaki Hedef Çerçeve Takma Adlarını (TFM' ler) kullanabilirsiniz.
<TargetFrameworks>net20;netstandard2.0;netcoreapp2.0</TargetFrameworks>
Desteklenen tek TFM'ler bunlardır.
.NET 5.0+ için hata ayıklamayla ilgili özel yan noktalar
Önemli
Varsayılan olarak kullanılan temel ikili serileştirme yöntemiyle ilgili güvenlik endişeleri nedeniyle görselleştiricinin .NET 5.0'dan başlayarak çalışması için ek adımlar gerekebilir. Devam etmeden önce lütfen bu bölümü okuyun.
Görselleştirici yöntemini uygularsaTransferData, en son sürümünde
VisualizerObjectSource
bulunan yeni eklenen GetDeserializableObject yöntemi kullanın. Döndürdüğü IDeserializableObject nesnenin serileştirme biçimini (ikili veya JSON) belirlemeye ve temel alınan nesnenin seri durumdan çıkarılarak kullanılabilmesine yardımcı olur.Debuggee-side çağrısının
TransferData
bir parçası olarak hata ayıklayıcı tarafına veri döndürüyorsa, yöntemi aracılığıyla hata ayıklayıcı tarafı akışına verilen yanıtı serileştirinSerialize.