[visual studio] Debugger Visualizers 확장

안녕하세요. 휴일 잘 보내셨는지 모르겠네요. 5 3일 있었던 커뮤니티 세미나에서 저질 진행을 하였던 임성윤입니다.

 

목소리도 작고, 진행상 어려움이 많았습니다. “처음이니..” 하고 모두 너그러운 마음으로 이해해 주셨으면 합니다. 제가 세미나 때 발표했던 내용을 간단하게 정리하여 올립니다.

 

오늘 정리할 내용은 디버깅시 생산성을 극대할 수 있는 Debuuger Visualizer의 기능을 확장해 보도록 하겠습니다.

 

콘솔 프로젝트를 하나 생성하겠습니다. 프로젝트의 이름은 ConsoleSample 이라고 하겠습니다.

using System.Data;

using System.Drawing;

 

namespace ConsoleSample

{

    class Program

    {

        static void Main(string[] args)

        {

            string strData = "MS 에반젤리스트와 함께 하는 커뮤니티 세미나.";

 

            DataTable dtData = CdataTable.nDataTable("dtSample");

            

            Bitmap bmp = (Bitmap)Bitmap.FromFile(@"C:\20080503\ConsoleSample\ConsoleSample\ImgTest.jpg");

 

        }

    }

}

[예제 1] ConsoleSample 프로젝트 - Program.cs


 

[그림 1] DataTip 영역

 

[그림 1-1] Text Visualizer

 

[예제 1]를 보시면 string, DataTable, Bitmap 세가지 객체가 존재하는 것을 보실 수 있습니다. 비주얼라이저는 디버깅 시 객체에 마우스를 가져가면 [그림 1]처럼 객체의 타입에 맞는 DataTip메뉴가 나오게 됩니다. 돋보기 혹은 DropDown 메뉴를 선택하시면 객체의 정보를 시각적으로 확인하실 수 있습니다.

 

[그림 2] Image 객체의 DataTip

 

하지만 Image 객체에 마우스를 가져가면 아쉽게도 비주얼라이저가 지원되지 않는 것을 확인하실 수 있습니다.

 

DataTip (데이터 집합 시각화 도우미 대화 상자)

http://msdn.microsoft.com/ko-kr/library/d480bk47(vs.80).aspx

 


이제 디버깅시 Image 객체도 바로 확인할수 있도록 비주얼라이저를 확장 시켜보도록 하겠습니다.

 

[그림 3] 새로운 프로젝트 생성

 

우선 Class Library 를 하나 만들겠습니다. 프로젝트 이름은 CustomDV라고 하겠습니다. Class1.cs 의 이름도 MyDV.cs로 수정하였습니다.

 

이제 비주얼라이저를 사용하겠다라고 참조를 하셔야 합니다. 참조폴더에서 참조 추가메뉴를 통해서 Microsoft.VisualStudio.DebuggerVisualizers 를 참조합니다.


MyDV.cs 의 내용입니다.

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Drawing;

using System.Windows.Forms;

using System.Data;

using System.Text;

 

using Microsoft.VisualStudio.DebuggerVisualizers;

 

[assembly: System.Diagnostics.DebuggerVisualizer(

typeof(CustomDV.MyDV),

typeof(VisualizerObjectSource),

Target = typeof(System.Drawing.Image),

Description = "Image Visualizer")]

namespace CustomDV

{

    public class MyDV

    {

    }

}

[예제 2] CustomDV 프로젝트 - MyDV.cs

 

[그림 4] 추상 클래스 DialogDebuggerVisualizer 상속

 

[그림 5] 가상 메소드 Show 메소드 재정의

 

[그림 4]처럼 DialogDebuggerVisulalizer 을 상속 받겠습니다. DialogDebuggerVisualizer 를 적으시면 그림처럼 스마트태그 리스트가 나오게 됩니다. 이때 마우스로 리스트를 선택하시거나 Ctrl + “.” 을 누르시면 가상 메소드 Show 메소드를 재정의하는 코드가 자동으로 삽입됩니다. [그림 5]를 보시면 objectProvider가 있습니다. 살펴볼 객체의 정보를 담고 있답니다. 그럼 objectProvider의 정보를 가져와 모달창으로 띄우는 작업을 해보도록 하겠습니다.

 

protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)

        {

            Image image = (Image)objectProvider.GetObject();

 

            Form MyForm = new Form();

            MyForm.ClientSize = new Size(image.Width, image.Height);

 

            PictureBox pictureBox = new PictureBox();

            pictureBox.Image = image;

            pictureBox.Parent = MyForm;

            pictureBox.Dock = DockStyle.Fill;

 

            windowService.ShowDialog(MyForm);

        }

[예제 3] Show 메소드

 

[예제 3]에서 objectProvider 를 이용해서 객체의 정보를 가져옵니다. 단순히 이미지만 보여지기 때문에 따로 Form 작업은 하지 않고 바로 생성해서 작업하겠습니다.

 


이제 빌드 후 배포하셔야 됩니다. 배포 방법도 사용방법만큼이나 간단합니다.

 

[그림 6] Visual Studio 2008 Add-in 폴더

 

이제 배포를 해보겠습니다. 배포는 VS2008 Add-in 폴더에 존재하는 Visualizers 폴더에 지금까지 작성한 CustomDV.dll 만 넣으시면 됩니다.

 


이제 테스트 해보겠습니다.

 

그럼 다시 ConsoleSample 프로젝트로 돌아가서 디버깅 시켜보도록 하겠습니다.

 

[그림 7] Image Visualizer

 

아까 이미지 객체에는 제공되지 않았던 비주얼라이저가 보이실 것입니다. 그럼 클릭해서 이미지가 재대로 보여지는지 확인해보도록 하겠습니다.

 

[그림 8] Image Visualizer 테스트

 

[그림 8]처럼 이제 디버깅시 Image Visualizer 를 통해 바로 객체를 확인 하실 수 있습니다.



읽어 주셔서 감사합니다. 수고하셨습니다.

Posted by
임성윤 (err@live.it, errblog)

By err 5/7/2008 11:10:26 PM
< PREV 1 NEXT.. >