본문 바로가기

C / C++ / Win32 / MFC

원격 디버깅 (Remote Debugging)

본 포스트는 2006/8/6 작성되었습니다.

지난 7월 마이크로소프트에서는 윈도우98/Me에 대한 지원을 중단하였습니다.

윈도우98/Me에 대한 보안패치를 포함하여 어떤 기술지원도 하지 않는다는 것입니다.

항간에는 윈도우의 최신버전을 팔아먹기 위한 MS의 오만방자한 수작이라고 비난하는

사람도 많지만, 저 역시 소프트웨어 아웃소싱 개발팀을 이끄는 사람으로서 계약기간이 훨씬 지난

프로젝트의 기술지원이나 디버깅이 얼마나 힘든 일인지 잘 알기에 MS의 입장을 충분히 이해합니다. 아마 윈도우 98/Me의 기술지원을 위해서 생각보다 많은 예산이 들어갈 것입니다. (MS에서는 전구 하나를 갈기 위해 수십명의 개발자가 필요하답니다. ^^)

만일 MS가 기존 윈도우 98/Me 사용자에 대해 거의 무료에 가까운 업그레이드 정책을 시행한다면 그 비난이 조금은 수그러들지 않을까 합니다만, 생각해보면 OS만 업그레이드 한다고 해서 문제가 해결되지 않습니다. 최신 OS(윈도우XP)를 돌리기 위한 하드웨어 업그레이드 비용과 어플리케이션 호환성 문제는 고스란히 사용자의 몫으로 남아 있을테니까요.

MS가 비난을 받건 말건 윈도우 98/Me의 기술지원을 중단한다는 발표는 우리 개발자들에겐 반가운 일이었습니다. 윈도우 98/Me 호환성을 요구하는 고객에게 MS의 정책을 핑계삼아 윈도우 98/Me에 대한 호환성 테스트에 대한 부담을 떨쳐 버릴 수 있게 때문입니다.

지금까지 우리가 맡아 온 수십건의 프로젝트 중 클라이언트 어플리케이션에서 단 2개만 제외하고 모두 윈도우 98/Me를 지원해야 했습니다. 개발의뢰업체들은 자신의 제품이나 서비스를 고객들이 이용함에 있어 윈도우 98/Me 사용자들이 얼마나 되는지도 관심없고 윈도우 98/Me를 지원하기 위해 소요되는 비용과 윈도우 98/Me 사용자 비율을 전혀 계산하지 않고 단 0.1%라도 있다면 무조건 윈도우 98/Me를 지원해야 한다는 입장입니다. 계약 관계에서 "을"일 수 밖에 없는 우리는 이와 같은 요구를 받아들일 수 밖에 없습니다. MS가 윈도우 98/Me 기술지원을 중단했지만 의뢰사의 윈도우 98/Me에 대한 호환성 요구는 당분간 계속 될 것 같습니다.

 

주제가 좀 빗나가긴 했습니다만,

우리 작업실에는 아주 아주 낡은, 두어 달에 한 번 켤까 말까 하는 고물딱지 PC가 하나 있습니다.

네 그렇습니다. 윈도우 98/Me 호환성을 테스트하기 위한 윈도우 98이 설치된 시스템입니다. 저를 포함한 우리 팀월들의 개발장비에는 윈도우2000/XP/2003 등이 설치되어 있기 때문에 윈도우 98/Me 호환성 테스트를 위해서는 이 고물딱지 시스템을 이용해야 했습니다. 그런데 문제는 윈도우95/98/Me에는 Visual Studio .Net 2003을 설치할 수 없어서 Debugging을 하는데 어려움이 많이 있었습니다. 그러던 중 원격 디버깅이라는 기능을 알게되어 지금까지 잘 사용해 오고 있습니다.

원격디버깅이란 디버깅 추적이 필요한 시스템에 Visual Studio 개발 도구나 디버깅 툴를 설치하지 않고 디버그 모드로 컴파일된 실행모듈을 실행하고 디버그 모니터링을 이용해 디버그 정보룰 네트워크로 전송하여 Visual Studio 개발 도구나 디버깅 툴이 설치된 시스템에서 소스레벨 디버깅이 가능한 기능을 말하는 것입니다.

이 기능을 윈도우98/Me 시스템 디버깅 뿐만 아니라 서버시스템이나 Visual Studio를 설치해서는 안되는 시스템에 이용하면 아주 효과적이라 할 수 있겠습니다.

 

여기 간단한 사용법을 영문 Visual Studio .Net 2003 을 기준으로 적어보겠습니다.

 

1. 디버그 모드로 컴파일된 실행모듈을 디버그 추적이 필요한 시스템에 복사 또는 설치합니다.

2. 다음의 파일들을 디버그 추적이 필요한 시스템에서 임의의 폴더를 하나 만들어 그 폴더로 복사합니다. 모두 같은 폴더에 있어야 합니다.

C:\Program Files\Microsoft Visual Studio .Net 2003\Common7\Packages\Debugger\ 에 위치한
msvcmon.exe
natdbgtlnet.dll
natdbgdm.dll

 

C:\Windows\System32 에 위치한
msvcr71.dll
psapi.dll
dbghelp.dll


 

3. 복사된 폴더에서 msvcmon.exe -tcpip -anyuser 를 실행합니다.

4. 디버깅 대상 실행모듈을 실행합니다.

5. Visual Studio .Net 2003이 설치된 시스템으로 돌아와 메뉴에서 Debug -> Processes 를 선택합니다.

6. 아래 대화상자에서 Transport를 TCP/IP로 설정하고 Name 에 디버그 추적할 시스템의 주소를 넣고 엔터키를 칩니다. 그러면 해당 시스템의 프로세스 목록이 나타납니다. 이때 디버깅할 프로세스를 더블클릭하면 디버깅이 시작됩니다. ActiveX Control을 디버깅 할 경우 iexplorer.exe를 더블클릭하면 됩니다.