사용자 도구

사이트 도구


kb:sourceserver

Source Server

Debugging Tools for Windows에 포함되어 있는 기능으로서 PDB 파일에다가 해당하는 소스의 버전 같은 것을 기록해서, 디버깅시 해당하는 소스 파일이 없으면 해당 소스를 자동으로 받아오는 기능이다. SymbolServer에서 심볼 파일 대신에 소스를 가져온다고 생각하면 되겠다.

소스 인덱싱하기

Perforce 기준이다. 다른 프로그램들도 크게 다르지는 않다.

1. Debugging Tools for Windows 배포본을 다운로드받아 설치한다. Source Server 관련 파일들은 기본적으로 깔리지 않도록 되어있으니, 인스톨 옵션을 조정해서 설치해야한다.

2. 펄을 설치한다. ActivePerl이면 충분하다. 설치할 때 perl 바이너리 패스 등록을 잊지 말도록.

3. ...\Debugging Tools for Windows\sdk\srcsrv 디렉토리 안에 있는 파일들을 모두 임의의 디렉토리에다 복사한다. C:\srcsrv 디렉토리에다 복사했다고 가정하겠다. 뭐 복사안해도 상관은 없는데, 그냥 긴 경로 타이핑하기 귀찮아서이다.

4. srcsrv.ini 파일을 편집한다. 다른 건 다 필요없고, 아래의 두 내용만 있으면 된다.

[variables]
XMSERVER=somewhere.over.the.rainbow:1666
 
[trusted commands]
p4.exe=C:\Program Files\Perforce\p4.exe

5. 심볼 파일에다 소스 정보를 집어넣어주는 배치 파일을 만든다. /symbols 인수는 소스 정보를 집어넣을 PDB 파일이 존재하는 디렉토리, /source 인수는 소스가 존재하는 디렉토리다.

@echo off
p4index.cmd /Symbols=C:\SomeProject\Bin /source=C:\SomeProject\Source

상대 경로는 몇몇 경우에서 문제가 생기는 케이스가 있는 모양이니 절대 경로를 이용하도록 한다. 이 파일을 실행하면 각종 변수들이 출력되면서 소스 인덱싱이 시작된다. 뭔가 문제가 생겨서 인덱싱이 제대로 나오지 않는 경우 ssindex.cmd 호출 부분에다가 /debug 인수를 추가해보기 바란다.

동작 방식

여기까지 하면, PDB 파일 내부에 빌드시 사용한 소스에 대한 정보가 들어가게 된다. 이 정보는 당연히 소스 컨트롤의 종류에 따라 틀리다. 이 정보를 보기 위해서는 Srctool.exe 유틸리티를 이용하면 된다.

srctool.exe GameServerDebug.pdb
[d:\project\anima\source\shared\afc\debug.cpp] 
  cmd: p4.exe 
    -p xxx.xxx.xxx.xxx:1666 print 
    -o "D:\Project\Anima\Source\Server_Bin\XMSERVER\AnimaFiles\Main\Shared\AFC\Debug.cpp\2\debug.cpp" 
    -q //AnimaFiles/Main/Shared/AFC/Debug.cpp#2
[d:\project\anima\source\shared\afc\exception.cpp]
  cmd: p4.exe 
    -p xxx.xxx.xxx.xxx:1666 print 
    -o "D:\Project\Anima\Source\Server_Bin\XMSERVER\AnimaFiles\Main\Shared\AFC\Exception.cpp\5\exception.cpp" 
    -q //AnimaFiles/Main/Shared/AFC/Exception.cpp#5
...
GameServerDebug.pdb: 2434 source files are indexed - 1040 are not

나온 내용(보기 불편해서 좀 편집했음)을 보면 알겠지만, 각각의 소스를 가져오기 위해서 필요한 소스 컨트롤 커맨드가 PDB 파일에 들어가는 형식이다.

이렇게 생성한 PDB 파일을 symstore 유틸리티를 통해 SymbolServer에다 추가해놓으면 만사 오케이.

인덱싱 정보 사용하기

Visual Studio 2005의 경우에는 소스 서버 관련 기능이 통합되어 있다. 사용하기 위해서는 Tools > Options > Debugging > General 항목으로 가서 “Enable source server support” 항목을 활성화해주면 된다.

다만 위에서도 언급했듯이 PDB 안에 들어가있는 내용은 소스 컨트롤 커맨드다. 소스 컨트롤에 접근 권한이 없는 경우에는 애로사항이 꽃핀다는 이야기다. 소스 컨트롤 대신 HTTP를 이용해 진행하는 방식이 있기는 하다만 이건 애초에 소스 인덱싱할 때 미리 그렇게 저장해두는 것일 뿐…

PDB 파일 안에 소스 컨트롤 주소까지 다 들어가있기 때문에 나중에 서버 주소가 바뀐다던지 하는 문제가 생길 수 있는데, 이런 경우에는 pdbstr.exe 유틸리티를 이용하면 된다. 하지만 안 바꾸는 게 최고겠지.

링크

kb/sourceserver.txt · 마지막으로 수정됨: 2014/11/12 12:36 저자 excel96