Visual Studio 2005 - 간단한 심볼 파일 사용방법

윈도우 개발자라면 아마 심볼 파일을 한 번은 들어봤을 것이다. 심볼 파일은 PDB (Program Database File)파일을 가리키며 각종 디버깅 정보가 담겨있어 릴리즈 환경에서 프로그램이 죽을 경우, 그 단서를 찾는데 많은 도움을 준다. 특히, 윈도우의 각종 기본 DLL (예: NTDLL.DLL, USER32.DLL)의 PDB를 다운받아 설치하면 알 수 없는 숫자 주소로만 표시된 함수들의 이름을 볼 수 있다. 리버스 엔지니어링까지는 아니더라도 윈도우 내부가 어떻게 돌아가는지도 슬쩍 엿 볼 수 있다.

VS 2003까지는 심볼 파일을 직접 다운 받아 설치하거나 (여기에서 다운로드) 심볼 서버를 통해 on-demand로 다운을 받을 수 있었다. 후자의 방법이 더 확실하나 그 설정이 귀찮은 단점이 있었다. VS 2005에서는 이 설정이 무척 간단하다. 간단한 예제(?)를 통해 살펴보자.

예전 HWP 파일을 보고 싶어서 HWP 뷰어를 설치하였다. 그러나 비스타에서는 시작 조차 되지 않고 바로 죽고 만다. (역시 멋진 소프트웨어!) 그래서 왜 죽는지 보려고 디버거를 붙여보았다.


밑에 보면 HwpView.exe라는 모듈이 보이고, 0x0045f644에서 호출된 각종 시스템 콜들이 보인다. 그리고 ntdll.dll 함수 어딘가에서 장렬하게 0xC0000005 Access Violation 오류를 일으키며 전사하고 있다. 보다시피 DLL의 함수 이름이 모두 주소로만 표현이 되어있어서 어디가 문제인지 감을 잡기가 불가능하다.


이제 이 Call Stack 창에서 우클릭 후 Debugging Symbols Setting 화면으로 들어간다. 그리고 http로 시작하는 심볼파일 위치를 클릭 한다. 그리고 다운 받은 PDB 파일을 어디에 저장할지도 기록한다. 그러면 VS 2005는 잠시 먹통이 된다. 네트웍 상태가 좋지 않으면 한참 동안 먹통이 된다. 직접 MS 심볼 서버에서 필요한 모듈 심볼 파일을 다운 받기 때문이다. 다운 받은 파일은 아래와 같이 지정된 폴더에 저장된다. VS 2003까지는 이 과정을 직접 손으로 해야 했다. VS 200에는 아주 그 기능이 내장이 되어서 편리해진 것이다.


대략 60MB 정도의 PDB 파일들이 다운 받아졌다. 보다시피 gdi32, atl71과 같은 기본 DLL 모듈들의 PDB가 설치가 되었다. 마지막으로 VS 2005을 종료하고 다시 실행시켜준다. 그러면 이제 함수 이름들을 살펴볼 수 있다.


보다시피 user32.dll 및 ntdll.dll의 함수 이름이 표시되고 있다. 죽은 곳은 메모리 할당 부분이었다. 그리고 그 시초는 LoadImageInternal이라는 시스템 콜에서 기인된다. (보나마나 아주 사소한 실수일 듯.) 하나 무척 재밌는 것은 저기 빨간 줄 밑에 있는 HwpView.exe!0045f644 지점 부근에 브레이크 포인트를 걸고, 다시 실행을 시키면 뷰어가 작동한다는 점! 아놔~

아래아 한글은 지들끼리도 호환이 잘 안 되는 기묘한 특성을 가지고 있다. 특히2004버전과 2002버전(버전명 확실치 않음)에서 벌어진 수식간의 충돌은 정말 사람의 인내심을 테스트하기에 딱 좋은 예다. 그래도 많이 좋아졌지, 예전에는 Undo도 거지 같아서 정말 사람 미치게 한 적이 한두 번이 아니었음. 그래도 그 긴 대학 시절의 모든 리포트를 아래아 한글로만 작성하였음. 몇몇 부분은 정말 사람을 미치게 하지만 풍부한 표현 능력은 참 좋았음. 특히 그림 등을 글자로 취급해서 마치 LaTeX처럼 빠르게 그림들의 위치 수정은 정말 훌륭함. 수식 역시 키보드 명령어 다 외우면 순식간에 작성할 수 있었음!

한줄요약: 디버깅 심볼 파일을 설치합시다.

by object | 2007/03/04 08:31 | 컴퓨터 | 트랙백 | 핑백(4) | 덧글(4)
트랙백 주소 : http://minjang.egloos.com/tb/979045
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at art.oriented : V.. at 2008/03/06 04:55

... 요즘 컴퓨터에서는 매우 가벼워진 VC6 덕택에 이 녀석을 에디터로 쓰시는 분들도 봤다)VS 2003 시절까지만 해도 디버깅 심볼 서버 쓰기 위해서 삽질 좀 해야했던 것도 VS 2005에서는 그냥 된다. 또, VS 2003 까지만 해도 툴바 설정, 폰트 색깔 설정을 새 컴퓨터로 이동하기 위해 레지스트리도 백업해야하고 파일들도 카피해야했던 것에 비해, 세팅을 이전할 ... more

Linked at Death : Rebirth .. at 2008/03/06 09:41

... 요즘 컴퓨터에서는 매우 가벼워진 VC6 덕택에 이 녀석을 에디터로 쓰시는 분들도 봤다)VS 2003 시절까지만 해도 디버깅 심볼 서버 쓰기 위해서 삽질 좀 해야했던 것도 VS 2005에서는 그냥 된다. 또, VS 2003 까지만 해도 툴바 설정, 폰트 색깔 설정을 새 컴퓨터로 이동하기 위해 레지스트리도 백업해야하고 파일들도 카피해야했던 것에 비해, 세팅을 이전할 ... more

Linked at jelly's 노트생각 : V.. at 2008/07/24 13:44

... 요즘 컴퓨터에서는 매우 가벼워진 VC6 덕택에 이 녀석을 에디터로 쓰시는 분들도 봤다)VS 2003 시절까지만 해도 디버깅 심볼 서버 쓰기 위해서 삽질 좀 해야했던 것도 VS 2005에서는 그냥 된다.또, VS 2003 까지만 해도 툴바 설정, 폰트 색깔 설정을 새 컴퓨터로 이동하기 위해 레지스트리도 백업해야하고 파일들도카피해야했던 것에 비해, 세팅을 이전할 수 ... more

Linked at Dreaming Of Plat.. at 2009/08/18 15:26

... VS 2005에서는 그냥 된다</a><a title="다음 링크를 새 창으로 엽니다. : 'VS 2005에서는 그냥 된다'" style="PADDING-LEFT: 15px; BACKGROUND: url(/plugins/NewWindowLink/newwindow.gif) no-repeat 0px 50%; BORDER-TOP-STYLE: none; MARGIN-RIGHT: -0.5em; BORDER-RIGHT-STYLE: none; BORDER-LEFT-S ... more

Commented by alcoholism at 2007/03/04 23:22
끙, 직장에서 새로 도입한 그룹웨어에서 공문 작성에 한글2005를 사용해서 몇 년만에 한글 깔아봤는데.. 교육 시간에 제가 비스타에서 잘 돌아가냐니까 테스트를 해보긴 했는데 비스타는 아직 출시가 안되었고 어쩌고 하더라구요. 아니, 명확하게 얘기를 해야지, 이런 식의 발언은 물건 팔아먹는 분들 치고는 너무 무책임하게 들려요. 곧 비스타를 깔면 그룹웨어 쓸 때 한 동안 문제를 겪지 않을지 조금 걱정되어요. -_-;
Commented by object at 2007/03/05 02:18
한글 2005는 깔릴지도 모르겠어요. 제가 말한건 뷰어인데, 아마 프로그래머 데려다 놓고 반나절이면 고칠 버그로 보입니다. 디버거 붙이면 왜 돌아가냐고요;;
Commented by 학주니 at 2007/03/05 13:27
디버거 붙여서 돌아간 케이스가 하나둘이 아닙죠. -.-;
솔직히 개발하면서도 릴리즈모드로는 안되는데 디버그모드로 돌리면 아주 잘 돌아가곤 하더라고요(릴리즈모드보다는 디버그모드에 허용폭이 넓어서 그런가).
Commented by object at 2007/03/06 17:55
같은 코드를 디버그에 물리고 물리지 않고의 차이는 참 오묘하죠. 일종의 하이젠버그로도 볼 수 있겠습니다. 디버거를 붙이면 무언가 미묘한 인스트럭션가 인터럽트의 차이로 특정 문제가 사라지는 경우가 있습니다. 그러면 정말 미치죠. 물론 디버그 모드로 컴파일된 코드는 완전히 다르니 별개의 문제이구요.

:         :

:

비공개 덧글

<< 이전 페이지 다음 페이지 >>





by 김민장 2008 이글루스 TOP 100
최근 등록된 덧글
개발자 입장에서의 수많은 ..
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
최근 등록된 트랙백
조엘 스폴스키의 강연 (Sta..
by 인덕원칸타타
[Redis] sds.c를 분..
by 조급하지말고 천천히
메뉴릿
이글루 파인더

website counter

Add to Google

rss

skin by 이글루스