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. Yeni model kullanılarak oluşturulan uzantılar için, bunun yerine Visual Studio hata ayıklayıcısı görselleştiricileri oluşturma bağlantısındaki belgelere bakın. Visual Studio'nun eski sürümlerini desteklemeniz gerekiyorsa veya özel görselleştiricilerinizi bir kitaplık DLL'sinin parçası olarak göndermek istiyorsanız, bu makaledeki yalnızca eski uzantı geliştirme modeli (VSSDK) için geçerli olan bilgileri kullanın.

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ç simgesi VisualizerIcon 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:

Uyarı

Evrensel Windows Platformu (UWP) ve Windows 8.x uygulamaları için özel görselleştiriciler desteklenmez.

Genel Bakış

Bir yönetilen sınıfın nesnesi için, Object ve Array dışında, özel bir 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 bir IVisualizerObjectProvider veri nesnesini alır. Debuggee tarafı, 'den türetilen VisualizerObjectSource üzerinden nesneyi 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 etkileşime geçmek 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 Stream içerisine seri hale getiren ve Stream içeriğinden veri nesnesine geri dönüştüren yöntemler aracılığıyla 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, ilgili sınıftan DialogDebuggerVisualizer devralan bir sınıf oluşturur ve arabirimi görüntülemek amacıyla Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer.Show yöntemini geçersiz kılarsınız. Görselleştiricinizde Windows formlarını, iletişim kutularını ve denetimleri görüntülemek için kullanabilirsiniz IDialogVisualizerService .

  1. Görselleştirilmiş nesneyi hata ayıklayıcı tarafında almak için IVisualizerObjectProvider yöntemlerini kullanın.

  2. öğesinden DialogDebuggerVisualizerdevralan bir sınıf oluşturun.

Uyarı

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 ikili serileştirme aracılığıyla hata ayıklanan ve BinaryFormatter tarafları 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 belgelerinde açıklandığı gibi, hata verecek. 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, önceki bölümde geçersiz kılınan Show yöntemi yine de bir IVisualizerObjectProvider alır. Ancak, Visual Studio 2019 sürüm 16.10'dan başlayarak, aslında IVisualizerObjectProvider3 türündedir. Bu nedenle, objectProvider nesnesini güncelleştirilmiş arabirime yayın.

  • Nesneleri, örneğin komutlar veya verileri, hata ayıklama tarafına gönderirken, IVisualizerObjectProvider2.Serialize yöntemini kullanarak bir akışa geçirin; bu yöntem, hata ayıklama işlemi'nin ç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 Stream döndürülen nesnede TransferData bulunur. IVisualizerObjectProvider2.GetDeserializableObjectFrom yöntemini kullanarak bir IDeserializableObject örneği alın ve gerektiği gibi işleyin; veya seri durumda nasıl çıkarmayı bildiğiniz bir türse, DeserializeFromJson kullanın.

Lütfen İkili Serileştirmenin desteklenmediği durumlarda .NET 5.0+ için Özel hata ayıklama tarafı dikkate alınması gerekenler bölümüne başvurun ve hata ayıklama tarafında hangi diğer değişikliklerin gerektiğini öğrenin.

Uyarı

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ı tarafındaki kodda, DebuggerVisualizerAttribute öğesini düzenleyerek, görselleştirmek için türü belirtin (VisualizerObjectSource), bu, hata ayıklaması yapılan nesne kaynağı içindir. 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üzenleyebilmesi için, nesne kaynağının VisualizerObjectSource'den türemesi ve TransferData veya CreateReplacementObject yöntemlerini geçersiz kılması 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 TransferData yöntemini uygularsa, en son sürümde GetDeserializableObject bulunan yeni eklenen VisualizerObjectSource yöntemini kullanın. IDeserializableObject'nin geri döndürdüğü değer, nesnenin serileştirme formatını (ikili veya JSON) belirlemeye ve altyapı nesnesinin seri durumdan çıkarılarak kullanılmasına olanak sağlamaya yardımcı olur.

  • Debuggee-side çağrısının bir parçası olarak TransferData 'a veri döndüğünde, yanıtı debugger-side akışına Serialize yöntemi aracılığıyla serileştirin.