윈도우 프로그램은 Windows가 기본 제공하는 각종 .dll 들을 이용해서 프로그램을 하게 된다.

그런데 소스코드를 실행 중에 다음과 같은 고약한 에러가 발생하면서 프로그램이 강제 종료된다.

기본적으로 친절하지 않은 에러 메시지이다.




아래는 프로그램이 멈춘 곳의 콜스택(CallStack)의 정보이다.

Windows가 제공하는 user32.dll에서 에러가 발생했는데 어떤 함수인지 등에 대한 정보가 없이 그냥 메모리 주소 값만 표시해 주고 있다.




이럴 경우 사용하게 되는 것이 윈도우즈의 심볼파일이라고 불리는 PDB 파일들이다.

즉 user32.dll에 대한 .PDB 파일을 마이크로소프트의 Symbol Server로부터 내려 받으면 막연한 메모리 주소 값이 아닌 user32.dll의 어떤 함수에서 에러가 발생했는지의 정보까지를 확인하게 된다.

아래는 Symbol파일이 설치되었을 때 보여주는 정보이다.




그러면 어떻게 Symbol 파일을 설치할수 있는지를 알아야겠는데 과정이 약간은 복잡성이 있다.

프로그램이 실행 중에 위와 같이 프로그램이 강제 종료된 상황에서 Call Stack 탭을 연 후 마우스 우측 클릭 후 팝업 메뉴에서 "Symbol Settings" 메뉴를 클릭한다.




Options 다이얼로그 창에서 아래 작업을 진행한다.


1) PDB 심볼파일을 다운로드 받을 경로를 설정한다(①).

Debugging - Symbols에서 우측 항목 중 Cache symbols in this directory 항목에 심볼파일을 다운로드 받을 경로를 지정해 준다.


2) Symbol file (.pdb) locations: 항목에 아래 경로를 추가해 준다(②③) 

http://msdl.microsoft.com/download/symbols


3) Load all symbols 버튼을 눌러 모든 .pdb 파일들을 다운로드 받는다(④)

아래 그림은 다운로드 받는 장면 중 하나이다.



이렇게 심볼파일이 설치가 되면 Call Stack의 메시지가 아래와 같이 user32.dll 중에서 wsprintfW()함수에서 에러가 발생했음을 보여준다.

-. CallStackFunction.png



아래 이미지는 다운로드된 심볼 파일들 목록 중 일부이다. 이 경우는 Visual Studio 2010이며 Windows 7 64bit 환경일 경우이다.


+ Recent posts