안녕하세요. 휴일 잘 보내셨는지 모르겠네요. 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 객체에 마우스를 가져가면 아쉽게도 비주얼라이저가 지원되지 않는 것을 확인하실 수 있습니다.
이제 디버깅시 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)