반응형

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8454

MiniDump를 위한 심볼/소스 서버 구성하기

팀에서 사용하려고 만든 문서 올려봅니다.

SVN을 기준으로 작성했으나.. 소스세이프나 CVS등도 가능합니다.

수정/개선 사항 있으면 코맨트 부탁드립니다.

---------------------------------------------------------------------------------------------------------------

개발한 응용프로그램을 배포하면 뜻하지 않게 프로그램이 죽는 문제를 만나게 된다. 이런 경우 어디에서 왜 죽었는지를 파악하기 위해 dump파일을 생성하게 된다.

그러나 이렇게 생성된 dump파일도 해당 프로세스의 버전과 동일한 .pdb 및 소스가 없다면 무용지물이 된다.

제품을 출시한 후에 소스를 끊임없이 수정하는 상황에서는 소스 및 pdb 파일의 관리가 어려워진다.

이 문서는 생성된 dmp파일이 올바른 pdb및 소스를 자동으로 찾도록 해서

관리를 쉽게 할 수 있는 심볼/소스 서버를 구축하는 방법을 소개한다.

1. Debugging Tools for Windows 설치하기

서버를 구성하기 위해서는 symchk, symstore 등 심볼을 관리하는 프로그램이 필요하다. 이것은 Debugging Tools for Windows에서 제공하고 있다.

아래의 주소에서Debugging Tools for Windows를 최신 버전으로 다운로드 해서 설치한다.

32비트http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
64
비트http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx#

그러나 2010/02/26버전부터 WDK(Windows Driver Kit)에 통합됐기 때문에 32/64에 무관하게 아래의 주소에서 다운로드 받으면 된다.

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=36a2630f-5d56-43b5-b996-7633f2ec14ff

2. OS심볼의 자동 다운로드 설정

WinDbg Visual Studio에서 OS exe/dll 파일의 심볼을 자동으로 다운로드 할 수 있도록 다음과 같이 시스템 변수를 등록해야 한다.

변수 이름 : _NT_SYMBOL_PATH
변수 값 : SRV*E:\Debugging\Symbols\Os\*http://msdl.microsoft.com/download/symbols

빨간색으로 된 부분은 각자의 환경에 맞게 설정해야 한다. 위의 경로는 OS의 심볼들을 위한 것이고 후에 우리가 만든 제품의 심볼을 저장할 경로도 설정할 것이므로 Symbols밑에 OS로 폴더를 구분하는 것을 추천한다.

3. 심볼/소스 서버의 경로 설정

우리가 작업하는 프로젝트의 위치는 가변적이기 때문에 심볼/소스 서버의 관리 프로그램의 경로를 설정한다.(다음 페이지 그림 참조)

64비트의 경우 기본 경로는 아래와 같다.
(
심볼 서버
) C:\Program Files\Debugging Tools for Windows (x64)\
(
소스 서버) C:\Program Files\Debugging Tools for Windows (x64)\srcsrv\

4. VisualSVN 설치

소스 서버에 접속해서 버전에 맞는 소스를 가져오기 위한 클라이언트를 설치한다. 클라이언트 마다 후반부에 설정이 약간 달라지며, 여기서는 VisualSVN을 기준으로 설명한다.

아래의 두 프로그램을 설치한다.

http://www.visualsvn.com/visualsvn/download/tortoisesvn/
http://www.visualsvn.com/visualsvn/download/

5. Visual Studio 설정(2005/2008)

dmp 파일을 Visual Studio에서 로드하면 dmp가 생성됐을 당시의 OS dll pdb 파일이 필요하다.

다음의 두 그림처럼 옵션을 설정하면 필요 시 자동으로 다운로드 한다.
(2. OS
심볼의 자동 다운로드 설정이 필요한 이유이다.)

6. ActivePerl 설치하기

다음 단계에서 사용 할 소스 서버 관리 프로그램인 svnindex.cmd Perl이라는 스크립트이다. 이 스크립트를 실행할 수 있도록 아래의 경로에서 프로그램을 다운 받아 설치한다.

설치 할 때 여러 가지 물어보는 데 잘 읽어보자.

http://www.activestate.com/activeperl/downloads/

7. 리부팅

설정한 path도 적용할 겸 리부팅 한 번 하자.

8. 소스 서버 접속 정보 설정

소스 서버에 접속해서 적합한 소스 파일을 얻기 위하여 소스 서버의 접속 정보를 설정해야 한다. 아래의 파일을 수정한다.(내용이 많으나 다 지우고 아래 언급한 것만 남기면 된다.)

C:\Program Files\Debugging Tools for Windows (x64)\srcsrv\srcsrv.ini

MYSERVER는 소스 서버의 주소 및 저장될 위치이다.(아래 그림 참조)
trusted commands
는 소스 서버에 접속 할 클라이언트 프로그램의 위치이다.

[variables]
MYSERVER=https://192.168.0.70:8443/svn/

[trusted commands]
svn.exe=C:\Program Files (x86)\VisualSVN\bin\svn.exe

9. 소스 서버에 솔루션의 등록

Visual Studio 2005/2008의 솔루션 탐색기에서 오른쪽 버튼을 누르면 다음과 같이 메뉴가 나타난다. Add Solution to Subversion을 실행하자

해당 솔루션의 루트 폴더를 지정하자. 뒷 부분에서 pdb파일에 소스 정보를 입력할 때 아래의 경로가 사용된다.

다음 단계에서는 대부분은 소스 서버의 관리자가 아니기 때문에 그냥 기존에 있는 걸 사용한다.

"8. 소스 서버 접속 정보 설정" 단계에서 설정한 서버의 주소를 사용한다.

Finish 버튼까지 모두 마치면 아래의 그림처럼 솔루션이 소스 서버에 등록 된다.

10. 프로젝트 빌드

이제 드디어 빌드를 할 수 있다. 빌드를 해서 exe도 만들고 pdb 파일도 생성하자.
빌드가 끝나면 소스를 소스 서버에 commit 하는 것도 잊지 말자.

11. pdb에 소스 버전 정보 삽입

svnindex를 사용해서 아래와 같이 입력하면 pdb에 소스 버전 및 위치 등을 입력한다.
/source
"9. 소스 서버에 솔루션의 등록"에서 지정한 솔루션의 루트 폴더이다
.
/symbols
는 빌드가 돼서 pdb가 존재하는 경로를 지정한다.

경로를 지정할 때에는 반드시 절대 경로를 사용한다. 상대 경로에는 몇몇 경우에 오류를 발생 시킨다고 한다.

E:\>svnindex /source="E:\Current Projects\Visual Studio 2008\Projects\TestMiniDump" /symbols="e:\Current Projects\Visual Studio 2008\Projects\TestMiniDump\Debug"

12. 소스 정보 확인

pdb에 소스 정보가 제대로 저장됐는지 확인하려면 srctool을 사용하면 된다.

E:\Current Projects\Visual Studio 2008\Projects\TestMiniDump\Debug>srctool TestMiniDump.pdb

아래 그림처럼 나온다면 성공이다.

13. 심볼 서버에 저장

이제 멀쩡한 심볼을 만들었으니 심볼 서버에 저장하면 된다. 아래의 명령은 E:\Current Projects에 있는 모든 exe/dll 등을 E:\Debugging\Symbols\Product에 저장한다는 뜻이다. 각각의 경로는 환경에 맞게 설정한다.

/t 옵션은 Title의 약자로 프로젝트 마다 설정하는 것으로 예상되나 각자 마음에 드는 것을 선택해도 상관없다. 다만 한 번 지정된 이름을 변경하면 안 된다는 것만 주의하자.

symstore add /r /f "E:\Current Projects\*.*" /s "E:\Debugging\Symbols\Products\" /t "AronStaff"

14. dmp파일의 확인

이제 모든 준비가 끝났다. dmp 파일을 더블 클릭해서 Visual Studio를 실행하고 F5를 눌러서 실행하기 버튼을 누르면 자동으로 문제가 발생한 소스의 위치와 당시의 스택 정보를 보여준다.

15. 조금 더 편하게

svnindex symsotre를 프로젝트 마다 경로를 지정하고 실행하는 것은 번거롭다.(매우 번거롭다) 그러나 Visual Studio "빌드 후 이벤트" 기능을 사용하면 보다 편하게 사용할 수 있다.

빌드 후 이벤트 항목에 아래처럼 입력하자.

call svnindex /source="$(ProjectDir)" /symbols="$(TargetDir)"
call symstore add /r /f "$(TargetDir)*.*" /s "E:\Debugging\Symbols\Products" /t "$(SolutionName)"

만약에 매 번 빌드 할 때 마다 저장되는 것이 부담스럽다면 Release 모드에서만 위의 명령을 실행하도록 설정하자. Release Debug 보다 빌드 횟수가 적어서 덜 부담스러울 것이다.

반응형

+ Recent posts