Visual Studio 는 msvsmon.exe 라는 원격 디버거 모니터 프로그램을 통해 원격 디버깅을 지원합니다. 하지만, 이를 VMWare 에 사용하려면 네트워크를 설정하거나, 공유 폴더를 설정하고 파일을 복사하는등 디버깅 한번 할때마다 이리저리 작업이 까다로운 것도 사실입니다. 그래서인지, 최근 VMWare 6.X 버전부터 Visual Studio IDE 에 통합되어 편리한 디버깅 기능을 지원합니다.
  최근까지는 전 원격 디버깅을 쓸 일이 없었습니다. 원격 디버깅이 약간 느리다는 문제점도 있고, 속편하게 VMWare 에 Visual Studio 를 설치한 후에 소스코드를 불러서 거기서 직접 디버깅을 했었지요. 그런데, 최근에 이것이 불가능한 일이 생겼습니다. 저의 작업환경은 VS 2008 SP1 인데 VMWare 는 윈도 2000 이었습니다. 윈도 2000은 VS 2008 이 설치가 되지않습니다. ㅠㅠ 결국, 저도 이제 원격 디버깅의 세계에 접어들어야할 관문이 다가온 것 이지요. 그래서 처음에 msvsmon.exe 를 이용해서 직접 원격디버깅을 하려고 자료를 찾았는데 여간 까다로운게 아니었습니다.

 그나마 제일 알아보기 쉽게 설명된 문서가 http://dbrureo.springnote.com/pages/737574/attachments/742500 이 파일이었습니다. 하지만, 역시 까다롭습니다. 그래서 결국 VMWare 가 VS IDE 에 붙어서 디버깅을 지원한다는 것을 생각해내고 이를 이용해보고자 했습니다.

 준비물 :
  - Visual Studio ( 저는 Visual Studio 2008 SP1 을 사용합니다 )
  - VMWare 6.X ( VMWare 6.5.2 를 사용했습니다 )
  - 디버깅할 Guest OS ( 비스타 x86 SP2 를 이용했습니다 )
  - Remote Debugger ( Visual Studio 설치할 떄 옵션으로 미리 설치하거나, 설치 DVD에서 찾을 수 있습니다. )
   - 기본으로 설치되면 C:\Program Files\Microsoft Visual Studio X.0\Common7\IDE\Remote Debugger 에 있습니다.

 준비사항 -
  - Host OS 의 계정 / 비번을 똑같게 Guest OS 에 설정해야합니다.
   즉, Host OS 에 현재 A 라는 계정에 B 라는 비밀번호를 통해 로그인되어있다면, 디버깅하려는 Guest OS 에도 A 라는 계정이 있고 B 라는 비밀번호를 통해 로그인할 수 있어야합니다. ( 자동로그인 설정해두면 편합니다 ).

  - Host OS 의 방화벽 설정, XP 이상이라면 첫 시도할 때 VS 쪽에서 방화벽 설정을 점검하고 자동으로 수정해줍니다. 2000 이라면 VS 도움말을 참조해서 DCOM 과 TCPIP 포트를 일부 허용해주시면 됩니다.
  - Guest OS 의 방화벽은 자동으로 설정됩니다. 꺼두면 조금이나마 빨라지는것 같습니다.


 VMWare Options 설정

  - VS 를 실행해서 VMware - Options 항목을 엽니다.
  - Live Debugging in VM - General 항목을 설정합니다.
   - Virtual Machine = 디버깅하려는 Guest OS 를 지정합니다.
   - Remote Debug Monitor Path = 위에서 언급한 경로에 있는 msvsmon.exe 를 찾아 설정합니다. Guest OS 가 64비트라면 x64 의 것을, 32비트라면 x86 의 파일을 선택합니다.
   - Guest Login Credentials = Guest OS 에 로그인하기 위해 필요한 계정 정보를 입력합니다. 앞서 언급한대로 Host OS 의 로그인정보와 일치해야합니다. 입력하지 않으면 첫 디버깅시도때 인증창이 뜹니다.
   - Guest Command = 파일을 복사한 후 실행할 명령 인자입니다. 기본 사항은 프로젝트의 설정을 이용하는 것이고 이곳에서 따로 설정할 수도 있습니다.
   - Shared Folders = 기본으로 VMware 가 복사해주는 폴더 대신 직접 지정할 수 있습니다. 공백으로 비워둬도 됩니다.

 자, 이제 설정이 끝났으니 F6 을 눌러, 디버깅을 시작해봅니다. 

  F6 를 누르면 VMWare 에 해당 Guest OS 가 시작되지 않았다면 자동으로 시작되고, 이미 시작되어 있다면 Msvsmon.exe 와 디버깅 파일들을 네트워크로 복사해서 실행하는 작업이 시작됩니다.


위의 화면은 처음 F6 을 누르면 나타납니다.

  이 화면은 로그인 작업 전후로 나타나는데요. 로그인이 자동으로 되지 않았다면 직접 로그인하고 로그인 작업이 끝났다면 확인을 누르시면 됩니다. 이것 때문에 자동 로그인으로 설정해두시면 편합니다. 아니면 Guest OS 를 미리 부팅해서 로그인까지 끝내두면 여기서 확인만 누르시면 됩니다.


  VMWare 가 자동으로 Msvsmon.exe 를 복사하면서 실행합니다. Msvsmon.exe 는 실행된 OS의 방화벽 설정을 확인하고 문제가 있다면 위와 같은 창을 띄워 자동으로 수정할 기회를 줍니다. 어차피 가상 OS 니까 편하게 3번째 것을 선택하시면 됩니다. 이 확인창은 Host OS 에 대해서도 동일하게 나타날 수 있습니다. 역시 3번째 것을 선택하면 됩니다. 네트워크 쪽을 잘 모르는데 Host OS 쪽에서 2번째 것을 선택하니 원격 디버깅이 되지 않더군요. ㅠㅠ



  위의 화면은 뭔가 문제가 있어서 원격 디버깅이 실패하면 나타나는 화면입니다. 가끔 정상인데도 나타나는 경우가 있습니다. 이떄 예를 누르면 되기도 합니다. 주로, Host OS 와 Guest OS 의 계정 일치 문제가 제일 많았습니다.


  위의 화면은 원격으로 Host OS 의 VS 에서 작성한 프로젝트가 실행된 화면입니다. 예제로 간단한 시작 프로젝트를 실행해봤습니다.

 위의 화면은 VMWare 가 실제로 네트워크로 복사한 경로입니다. 자동으로 Shared Folders 를 설정하고 원격 디버거 모니터와 프로젝트의 Debug 또는 Release 폴더를 통쨰로 복사한 후 실행해줍니다. 만약 프로젝트가 네트워크 경로에서 실행되는 것을 지원하지 않는다면 다른 우회책을 사용하셔야합니다. ^^

 마지막으로, Guest OS 에서 파일 열기 를 눌러 중단점을 설정한 화면입니다. 보시는 바와 같이 Host OS 쪽에서 정상적으로 중단점이 설정되고 호출 스택등도 문제 없이 확인이 가능합니다.

- 역시 날림 도움글인데 조금이나마 이글로 도움이 되었으면 좋겠습니다. ( ..)( '')//

댓글을 달아 주세요

  1. BlogIcon 김기원 2009.10.28 10:07 Address Modify/Delete Reply

    퍼갈께요... 감사합니다.