|
윈도우 프로그래밍을 처음 시작할 때였던 97년, 프로그램을 짜면서 비트맵을 디버깅해야 할 경우가 있었다. 그러나 마땅한 방법이 없으므로 BitBlt으로 공허한 영역에 계속해서 비트맵을 찍어줘야만 했다. 그 때부터 디버거가 직접 비트맵 핸들을 가시화해주면 어떨까라는 생각을 했었다.
오래 기다렸다. Visual Studio 2005의 새로운 디버깅 기능 중, Visualizer라는 것이 내가 원했던 것을 이제 해주고 있다. 아쉽게도 C/C++은 아직 이 기능을 사용하지 못한다. 어쨌든 C#에서 지원되는 기능을 보자. 다음 그림을 보라. 놀랍지 않은가!! [1] ![]() 대략 비주얼라이저를 요약하면 사용자가 디버깅 중 임의의 타입에 대한 가시화를 코드를 통해 짤 수 있다는 것이다. 다시한번 아쉽게도 C/C++은 아직 이런 수준까지는 할 수 없다. 그러나 아쉬워하기에는 이르다. 이미 VC++ 사용자에게 익숙한 autoexp.dat에 C# 수준은 아니지만 그래도 강력한 Visualizer가 이제 지원된다. 올 여름즈음에 디버깅을 하다가 특정 타입에 대한 출력 형태를 바꾸고 싶어서 오랜만에 autoexp.dat 파일을 찾아보았다. 그런데 생소한 [Visualizer] 섹션이 있었고, 나는 경악하지 않을 수 없었다. [2] ;------------------------------------------------------------------------------이 코드가 어떤 일을 하는지 바로 그림을 통해 알아보자. ![]() ![]() 먼저, 사용자가 오버라이딩하고 싶은 클래스 프로토타입을 쓰고 (std::map<*>), 크게 children 부분과 preview 부분을 작성한다. Preview 부분은 마우스 툴팁에 뜰 내용이고, children 부분은 +로 내용을 확장할 경우를 담당한다. Preview 섹션에서는 먼저 전체 원소의 개수를 보여준다. [$e._MySize] 그리고 #tree라는 반복 구문을 통해 트리 원소들을 순회하고 있다. 일반적인 트리의 자료구조는 root, left, right, parent 정도가 가능하다. 이들에 대응되는 포인터 값을 써주고 있다. 그리고 skip이라는 필드도 보인다. 잠깐 부연 설명을 하면 이렇다. Red-Black 트리의 구현은 알고리즘 책 중 가장 유명한 CLRS의 구현을 따른다. 이 책의 구현에 따르면 null 체크를 간단히 하기 위해 sentinel nil node라는 것을 두고 있다. 즉, null에 대응되는 더미 노드를 만드는 것이다. 루트는 부모 노드가 없으므로 이 경우는 특별히 skip 하라는 명령을 줘야할 것이다. 그래서 skip 필드가 있는 것이다. (어디까지 나의 추측) 이제 응용을 해보자. 나는 ATL Collection Library를 애용한다. 그 중에서도 Red-Black 트리에 기초한 CRBMap을 많이 쓴다. STL의 map과 같은 Red-Black 트리이므로 그대로 코드를 가져오면 될 것이다. 그러나 약간의 상이함이 있었다. skip/head 필드를 약간 손 봐야했다. (CRBTree 클래스는 CLRS의 Red-Black 트리 구현을 완벽히 따르고 있다.) ;------------------------------------------------------------------------------그 외, std::vector 소스를 기반으로 CArray와 CAtlArray도 만들어보자. 다음과 같다. ![]() 내가 Visual Studio를 [1] http://www.codeproject.com/csharp/ImageVisualizer.asp [2] C:\Program Files\Microsoft Visual Studio 8\Common7\Packages\Debugger\autoexp.dat
최근 등록된 덧글
개발자 입장에서의 수많은 ..
by Jiyoon at 02/04 저도 아들 돌잔치때 돌잡이 .. by 박상욱 at 01/18 미국 대학원 원서 작성중에 p.. by 태클사이야 at 01/13 TO: 박PD 로그인 하지 않아.. by 박응용 at 01/10 http://gigglehd.com/zbx.. by dhunter at 12/28 우와.. 좋네요. 태반이 .. by 윤광배 at 12/17 항상 좋은 글 잘 보고 있습니.. by y2k at 11/23 글이 좋아서 제 블로그에 담.. by 쏭섭 at 11/23 최근 등록된 트랙백
메뉴릿
이글루 파인더
|