Visual Studio 2013 “원격 Windows 디버거“는 원격 컴퓨터에서 실행되는 프로그램의 디버깅을 지원합니다. 예를 들어, 원격 서버 B컴퓨터에서 실행 중인 웹 어플리케이션이 원격 서버 B 컴퓨터에서 호출하고 있는 DLL 파일에서 오류가 발생하여 제대로 동작하지 않는 경우, 프로그램 개발 환경 A 컴퓨터에서 Visual Studio 2013을 실행하고 “원격 Windows 디버거“를 이용하여 원격 서버 B 컴퓨터의 해당 DLL 파일을 디버깅할 수 있습니다.
이 경우, Visual Studio 2013 “원격 Windows 디버거“를 통해 원격 서버 B 컴퓨터의 프로세스를 선택하고 브레이크 포인트를 설정할 수 있습니다. 그러면 원격 서버 B 컴퓨터에서 해당 DLL 파일이 실행될 때, 프로그램 개발 환경 A 컴퓨터의 Visual Studio 2013 소스 편집기에서 브레이크 포인트가 작동하여 실행을 일시 중지시키고, 디버거 창에서 변수의 값을 살펴보거나 코드를 단계별로 실행하여 오류를 발견하고 수정할 수 있습니다. 이렇게 하면 원격 서버 B 컴퓨터에서 실행 중인 웹 어플리케이션의 오류를 프로그램 개발 환경 A 컴퓨터에서 디버깅하여 해결할 수 있습니다.
이 글에서는 간단한 exe 프로그램을 이용해 원격 서버 B 컴퓨터에서 실행시켜 프로그램 개발 환경 A 컴퓨터에서 Visual Studio 2013을 실행하고 “원격 Windows 디버거“를 이용하여 원격으로 프로그램의 문제점을 찾는 방법을 소개합니다.
프로그램 개발 환경 A 컴퓨터에서 준비작업
브누아 망델브로가 고안한 프랙탈의 일종 Mandelbrot Set을 그리는 exe실행 파일을 만듭니다.
디버그용 소스 준비
Fractal 프로젝트를 만들때 사용하는 소스는 다음과 같습니다.
참고로 위 소스의 2행,61행의 // for remote windows debugger 주석 부분은 오직 “원격 Windows 디버거” 위해 추가합니다. 원격 서버 B 컴퓨터에서 실행한 프로그램이 바로 종료된다면 프로그램 개발 환경 A 컴퓨터의 디버거에서 그 프로세스를 Attach를 할 수 있는 시간이 없습니다. main()에 처음 부분에 Sleep( 20 * 1000 );를 추가하여 20초 대기 상태를 만들면 그 사이에 프로세스를 Attach를 할 수 있는 시간을 확보 할 수 있습니다. 오류가 발견되어 수정 후 디버그가 끝나면 2행,61행은 삭제하거나 주석으로 변경해 릴리스 합니다.
Visual C/C++ 솔루션 프로젝트 작성
다음과 같이 fractal 솔루션 fractal프로젝트를 만들과 위 소스를 다운로드해 소스 파일에 등록합니다. 솔루션 프로켁트 작성에 대해서는 (VS C/C++)Windows에서 c/c++ 프로그램 개발 환경 만들기(초기 설치) 글을 참조 하십시오.
빌드&실행 파일 exe작성
다음과 같이 속성 페이지를 열어 런타임 라이브러리를 기본값 다중 스레드 디버그 DLL(/MDd)에서 다중 스레드 디버그(/MTd)를 선택합니다.
그렇지 않으면 다음 공식 사이트에서 Microsoft Visual Studio 2013 재배포용 vcredist_x64.exe를 다운로드하여 fractal.exe를 실행하는컴퓨터에 설치해야합니다. Microsoft Visual Studio 2013이 설치된 머신에서는 설치하지 않아도됩니다.
구성은Debug 플랫폼은Win32로 빌드를 해서 에러가 없다면 다음과 같은 파일이 생성됩니다. 여기서 원격 Windows 디버거를 위해 필요한 fractal.exe , fractal.pdb의 파일이 만들어 졌는지 확인합니다. 참고로 PDB 파일 fractal.pdb은 Visual C++에서 생성된 프로그램 fractal.exe의 소스 코드의 줄 번호, 변수 이름 및 메모리 주소와 같은 디버깅 정보를 포함하고 있습니다.
C:\VS2013\Projects\fractal>tree . /F
C:\VS2013\PROJECTS\FRACTAL
│ fractal.sdf
│ fractal.sln
├─Debug
│ fractal.exe
│ fractal.ilk
│ fractal.pdb
└─fractal
│ fractal.vcxproj
│ fractal.vcxproj.filters
│ fractal.vcxproj.user
│ test.c
└─Debug
... 이하 생략 ...
DOS 명령 커맨드 창을 열어 fractal.exe를 실행하면 20초후 에 다음과 같은 결과가 표시됩니다.
원격 Windows 디버거를위해 fractal.exe를 원격 서버 B 컴퓨터의 다음디렉토리로 복사합니다.
C:\temp\fractal.exe
원격 Windows 디버거를 원격 서버 B 컴퓨터에 복사
프로그램 개발 환경 A 컴퓨터에 Visual Studio Express 2013 For Desktop가 인스톨 되었다면 다음과 같은 디렉토리에 원격 Windows 디버거 프로그램 msvsmon.exe 저장되어 있습니다. 참고로 Visual Studio Express 2013 For Desktop 인스톨에 대해서는 (VS C/C++)Visual Studio Express 2013 For Desktop다운로드 인스톨하기 글을 참조하십시오
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger
위 Debugger디렉토리를 통째로 원격 서버 B 컴퓨터의 다음과 같은 디렉토리로 복사합니다.
C:\temp\Debugger
원격 서버 B 컴퓨터 준비 작업
디버거 프로그램 실행하기
프로그램 개발 환경 A 컴퓨터에서 가져온 C:\temp\Debugger\X64\msvsmon.exe를 실행합니다. 그러면 다음과 같이 [원격 디버깅 구성] 화면이 표시됩니다.
[원격 디버깅 구성(O)] 버튼을 누르면 다음과 같이 [Visual Studio 원격 디버깅 모니터(관리자)] 화면이 표시됩니다.
[도구] > [옵션]을 눌러 다음화면에서 TCP/IP 포트 번호 4018와 Windows 인증이 선택되었음을 확인합니다.
참고로 [원격 디버깅 구성] 화면에서 [원격 디버깅 구성(O)] 실행 결과 Windows 방화벽에 “Visual Studio 원격 디버깅 모느터“가 추가 되었음을 확인 할 수 있습니다.
디버그 대상 프로그램 실행하기
프로그램 개발 환경 A 컴퓨터에서 가져온 C:\temp\fractal.exe를 실행합니다. 20초 대기
프로그램 개발 환경 A 컴퓨터에서 디버깅하기
한정자 입력 창에 원격 서버 B 컴퓨터에서 대기중인 [Visual Studio 원격 디버깅 모니터(관리자)]의 IP주소:포트 번호를 입력합니다.
모든 사용자의 프로세스 표시(U) 에 체크를 부여합니다.
[새로 고침(R)] 버튼을 클릭하여 사용 가능한 프로세스 일람을 다시 취득해서 표시합니다.
원격 서버 B 컴퓨터에서 실행한 C:\temp\fractal.exe가 표시되면 선택해 [연결(A)]을누릅니다.
원격 서버 B 컴퓨터에서 실행한 C:\temp\fractal.exe가 20초 Sleep을 경과하면 중단점 설정이 된 63행으로 진행하여 정지 상태에 있습니다. 이 상태에서 지역 변수등을 확인할 수 있습니다.
다음과 같이 디버그(D) 메뉴의 F11 : 한 단개씩 코드 실행(I) , F10 : 프로시저 단위 실행(O) , Shift+F11: 프로시저 나가기(T) 를 이용하여 한 스텝 한 스텝 코드를 진행하면서 지역 변수 값을 확인이 가능합니다.
F5를 누르면 중단점 설정에서 정지하거나 중단점 설정이 더이상 없다면 마지막까지 실행하여 프로그램이 종료됩니다.
댓글