|
윈도우 개발자라면 아마 심볼 파일을 한 번은 들어봤을 것이다. 심볼 파일은 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 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 최근 등록된 트랙백
메뉴릿
이글루 파인더
|