Aracılığıyla paylaş


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 VisualizerIcongö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:

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 .

  1. Hata ayıklayıcı tarafında görselleştirilmiş nesneyi almak için yöntemleri kullanın IVisualizerObjectProvider .

  2. öğ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.

  1. 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 .

  2. 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ınIVisualizerObjectProvider2.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öntemine IVisualizerObjectProvider2.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.

Not

Sorun hakkında daha fazla bilgi edinmek isterseniz BinaryFormatter güvenlik kılavuzuna 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 VisualizerObjectSourcebulunan 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.