Uygulamamızda debug yaparken nesnelerimizi daha anlaşılır şekilde görmek için çeşitli Visualizerları kullanırız. Örneğin bir DataTable ya da DataSet'in içeriğini debug işlemi sırasında Visualizer yardımı ile çok daha anlaşılır bir şekilde inceleyip, doğru datalarla çalışıp çalışmadığımıza karar verebiliriz. Yeri geldiğinde XML dosyalarımızın içeriğini de daha anlaşılır şekilde görüntülemek için XML Visualizer'den faydalanırız.

Visual Studio 2005, belirli tipler için visualizerlardan yararlanabilmemizi sağlıyor. Ama bu harika IDE istenildiğinde kendi nesnelerimizi de debug işlemi sırasında özel geliştirdiğimiz bir visualizer ile gösterebilme imkanı da sağlıyor. Senaryomuz şöyle;

Uygulamamız içinde Person isimli bir türümüz var. Debug işlemi sırasında kendi geliştirdiğim Visualizer ile (aşağıdaki resimde görüldüğü üzere) bu nesneyi görüntülemek istiyorum.

Bunun için yapmamız gereken projemize yeni bir Debugger Visualizer Item'ı eklemek olacaktır. Örnek projemiz ,geliştirğimiz Visualizer'i test edecek bir Windows uygulaması (PersonVisualizerTest), Person ve türeyen nesnelerimizi barındıran bir dll (EntityObjects), ve daha sonra da kullanmak amaçlı geliştireceğimiz içerisinde kendi visualizer'imizin bulunduğu bir başka dll (PersonVisualizerLib) projesinden oluşacak.

Person nesnemiz aşağıdaki gibidir. Dikkat edecek olursanız Serializable Attribute'ü uygulanmıştır nesnemize.Yani nesnemizin geliştirdiğimiz visualizer tarafından görüntülenebilmesi için nesne serileştirilebilir olmalı.

   [Serializable()]
    public class Person
    {
        Bitmap _picture;
        public Bitmap Picture
        {
            get { return _picture; }
            set { _picture = value; }
        }

        private int _no;
        public int No
        {
            get { return _no; }
            set { _no = value; }
        }

        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

    }
 

Gelelim visualizer'imizin geliştirilmesine. DLL Projemize (PersonVisualizerLib) sağtıklayıp Add->New Item... menüsünden "Debugger Visualizer"'i şeçip tamam diyoruz.Personel nesnemizin içinde olduğu dll i projemize ekledikten sonra Visualizer'imizin kodunu aşağıdaki gibi tasarlıyoruz.

[assembly: DebuggerVisualizer(typeof(PersonVisualizerLib.PersonVisualizer),
Target = typeof(EntityObjects.Person),
 Description = "Personel Debug Ekaranı ile Göster")]

namespace PersonVisualizerLib
{
  
    public class PersonVisualizer : DialogDebuggerVisualizer
    {
        protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
        {
           
            Person person = (Person)objectProvider.GetObject();
            using (PersonForm displayForm = new PersonForm())
            {
                displayForm.person = person;
                windowService.ShowDialog(displayForm);
            }
        }
    }
}

assembly attribute'ü ile visualizer'in tip bilgisi, hangi türden nesnelerin visualizer'da görüntüleneceği, ve debug esnasında visualizer'imizin görüntülenecek adını belirtiyoruz. Show metodunun içerisinde de debug esnasında görütülenmesini istediğimiz nesneyi alıp person türüne dönüştürdükten sonra Form'a bu nesneyi görüntülemesi için veriyorum

PersonForm, nesnemin görsel olarak gösteriminde kullanacağım form nesnem. Form'un üzerinde, person nesnesini gösterecek  PropertyGrid , person nesnesinin resmini gösterecek Picturebox , person nesnesinin Name ve No  özelliklerini gösterecek iki adet Label controlü içermekte.Form'un kodu da aşağıdaki gibidir.

        public Person person;
        public PersonForm()
        {
            InitializeComponent();
        }

        private void PersonForm_Load(object sender, EventArgs e)
        {
            label1.Text = person.Name;
            label2.Text = person.No.ToString();
            pictureBox1.Image = person.Picture;

            propertyGrid1.SelectedObject = person;
        }

Tüm bu hazırlıklardan sonra visualizer'i test edeceğim projeme Person nesnesinin içinde olduğu Dll'i ekliyorum. Visualizer'imizin VS.NET 2005 tarafından işlem görebilmesi için oluşan PersonVisualizerLib.dll 'ini C:\Documents and Settings\{user_name}\My Documents\Visual Studio 2005\Visualizers dizinine kopyalıyoruz. Artık kendi geliştirdiğimiz tüm uygulamalarda bu visualizer'i kullanabiliriz. Ama makina düzeyinde tüm kullanıcıların'da bu visualizer'den yararlanmasını istiyorsak ilgili dll'i C:\Program Files\Microsoft Visual Studio 8\Common7\Packages\Debugger\Visualizers dizinine kopyalamanız yeterli olacaktır.

Artık debug esnasında oluşturğumuz visualizer ile Person nesnemizi tasarladığımız şekilde görebilmek mümkün olacaktır.

Tabiki bu örnek dışında, örneğin geliştirdiğiniz bir asp.net uygulamasında ürün sepeti'nizi bir grid içinde görüntülemekten tutun, bir stream nesnesini istediğiniz formatta görüntülemeye kadar birçok özel visualizer geliştirerek debug işlemlerini hem kolaylaştırıp hem de daha zevkli hale getirmek mümkün :=)

PersonVisualizerTest.rar (43,77 KB) (Bahsi geçen örnek uygulama ektedir.)