Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 3.1. VS.NET 2003 원격 디버깅 설정 [링크 복사], [링크+제목 복사],
조회: 25994
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
부모글 보이기/감추기
(연관된 글이 1개 있습니다.)
VS.NET 2003 - 원격 디버깅



VS.NET 2003으로 원격 디버깅 하는 방법을 설명해 보도록 하겠습니다.

우선, VS.NET 2003에서는 Managed 환경과 Unmanaged 환경에 대한 원격 디버깅 구성이 다릅니다. 따라서, ASP.NET / WinForm App에 대한 원격 디버깅과 VC++에 대한 원격 디버깅이 나뉘게 되는 데요. Managed 환경인 경우 "Machine Debug Manager"라는 NT Service 프로그램이 대상 컴퓨터에 설치되어 있어야 하는 반면, VC++은 MSVCMON.exe가 대상 컴퓨터에서 실행되어져 있어야 합니다. 그럼, 먼저 환경 구성부터 시작해 보도록 하겠습니다.

- 원격 디버그 대상이 될 PC에 "Machine Debug Manager" 설치
1. 원격 PC의 CD-ROM에 VS.NET 2003 설치 CD를 넣습니다. 또는 VS.NET 2003 설치 폴더에 대한 공유 폴더를 연결합니다.
2. 다음과 같이 MDM(Machine Debug Manager)를 설치합니다.
  X:\>msiexec /qb+ /i [drive]:\[vs.net2003 폴더]\vs_setup.msi NOVSUI=1 TRANSFORMS="[drive]:\[vs.net2003 폴더]\setup\rmt9x.mst" SERVER_SETUP=1 
ADDLOCAL=Full_Remote_Debugging

    ex) D:\>msiexec /qb+ /i d:\english\vs.net2003\vs_setup.msi NOVSUI=1 TRANSFORMS="d:\english\vs.net2003\setup\rmt9x.mst" SERVER_SETUP=1 
ADDLOCAL=Full_Remote_Debugging

3. 간혹, 위와 같은 msiexec.exe를 통해서 설치가 안되는 경우가 있습니다. 그런 경우에는 VS.NET 2003 설치 파일인 setup.exe를 실행한 후, 대상 PC에 "원격 디버거" 구성 요소만을 선택해서 설치하실 수 있습니다.

VS.NET 2003 원격 디버거 설치

4. 서비스 관리자에서 "Machine Debug Manager"가 "시작됨" 상태인지 확인합니다. 만약 시작되지 않았다면 시작시킵니다.


- 원격 디버그 대상이 될 PC에 "MSVCMON.EXE" 설치
1. 셋업 파일을 통해서 설치를 했다면 VS.NET 2003이 설치된 폴더에 다음과 같은 폴더에 msvcmon.exe가 있는 것을 확인하실 수 있습니다.
   "C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Packages\Debugger"
사실, MDM 때문에 설치 과정이 필요했을 뿐이고 만약 VC++ 원격 디버깅을 위해 msvcmon.exe만 사용할 경우라면 굳이 셋업 과정을 거칠 필요없이, 위의 폴더를 그대로 복사하는 것만으로도 msvcmon.exe는 정상적으로 실행이 되어집니다. 실제로, msvcmon.exe가 실행되는 데에는 다음과 같은 3가지 파일이 하나의 폴더에만 같이 있으면 가능합니다.

msvcmon.exe
NatDbgDM.dll
NatDbgTLNet.dll

간단하죠. ^^ 그럼, 개발자 PC에서 해당 원격 PC에 대해서 "원격 디버깅"을 진행해 보도록 하겠습니다. ASP.NET과 WinForm App에 대해 각각 설명해 볼텐데요. (둘다 방법은 크게 다르지 않습니다.)

- ASP.NET 원격 디버깅
1. 원격 PC에 디버그하려는 웹 사이트에 대한 소스를 모두 복사합니다. 물론, dll과 pdb 파일 및 aspx 파일만 복사해도 무방합니다. 만약, 실서버에 대한 디버그를 하는 경우라면 이미 복사된 상태이겠지요.

2. 복사된 소스에 대해 원격 PC의 IIS 관리자에서 동일하게 웹 사이트 구성을 합니다. 가능한 개발자 PC에서와 동일한 가상 디렉터리 구조로 유지하시는 것이 좋겠지요.

3. 제가 가장 좋아하는 "F5 디버깅" 방식이 아쉽게도 ASP.NET에서는 가능하지 않습니다. (제가 방법을 모르는 것일 수도 있습니다.) 따라서, ASP.NET을 디버깅할 때에는 "Attach to Process"라는 방식을 사용해야 합니다. "디버그" 메뉴 / "프로세스" 메뉴를 선택하면, 다음 화면과 같이 "프로세스" 대화창이 뜹니다. "전송 모드"는 그대로 "기본값"을 사용하고, "이름"에는 원격지 PC의 이름이나 IP를 입력한 후, "Enter" 키를 치거나, "연결" 버튼을 누르면, "사용가능한 프로세스"에 다음과 같이 대상 컴퓨터에서 실행중인 프로세스 목록이 나옵니다.

Attach to process...

4. 물론, 그 전에 해당 원격지 PC에서 이미 ASP.NET 웹 페이지를 한번이라도 실행시켰어야 합니다. 그렇게 되면, w3wp.exe가 프로세스 목록에 보이게 되고, 그 프로세스를 선택 후, "연결" 버튼을 눌러주면 다음과 같은 창이 뜨게 됩니다.

디버그 유형

5. 당연히, "Common Language Runtime"을 체크해 두고 "확인" 버튼을 눌러주시면 됩니다. 이제, 원하는 페이지에 "중단점"을 설정하고, 원격지 웹 사이트에 해당 aspx 페이지를 IE에서 불러주면 정상적으로 디버깅이 가능하게 됩니다.

- WinForm 원격 디버깅
1. 위의 ASP.NET 원격 디버깅에서 했던 방식과 동일하게 "Attach to Process" 방식을 사용할 수 있습니다. IIS 구성 등이 필요없기 때문에 사실 더욱 간단한데요. 단지, 원격지 컴퓨터에서 해당 WinForm Application을 복사해서 실행시켜 놓기만 하면 ASP.NET 원격 디버깅 방식과 동일하게 진행될 수 있습니다.

2. "Attach to Process" 방식 이외에도, WinForm 응용 프로그램에서는 "F5 디버깅" 방식도 가능합니다. 이런 경우에는 원격지 PC에서 미리 WinForm 응용 프로그램을 실행시켜 두지 않고도 VS.NET IDE 상에서 "F5" 키를 누르는 것으로 원격지 PC에서 프로그램을 실행시켜서 자동으로 디버거를 붙일 수 있도록 하고 있습니다. 구성 방법도 제법 간단합니다. "프로젝트 속성" 창을 열어서 다음과 같은 항목들을 설정해 줍니다.

WinForm 응용 프로그램 원격 디버그 설정
 원격 디버깅 사용 : True
 원격 디버깅 컴퓨터 : [원격 PC 명 또는 IP ]
 디버그 모드 : "프로그램"
 시작 응용 프로그램 : [원격 PC에 복사한 WinForm 응용 프로그램의 경로]
3. 위와 같이 설정하고, 그대로 "F5" 키를 눌러주기만 하면, 원격 PC에 "시작 응용 프로그램" 에 지정한 경로의 응용 프로그램이 실행되면서 자동으로 디버거와 연결이 됩니다. 마치 로컬에서 디버깅하는 것과 같은 착각을 일으키게 합니다.

- Visual C++ 원격 디버깅
1. "원격 디버그 대상이 될 PC"에 "MSVCMON.EXE 설치"에서 언급한 데로, 원격지 PC에 msvcmon.exe를 설치한다음, 명령행에서 다음과 같이 실행합니다.
  Named Pipe 모드로 실행
    C:\>msvcmon.exe

  TCP/IP 모드로 실행
    C:\>msvcmon.exe -tcpip
TCP/IP가 보안상 취약한 점이 있지만 보다 빠른 디버깅 속도를 냅니다. 개인적으로는, 아무리 TCP/IP 모드가 보안상 취약하다고는 해도 간단히 디버깅만 하는 것이므로 TCP/IP를 즐겨쓰곤 합니다. 더군다나 connection이 이뤄졌을 때 해당 로그가 아래와 같이 화면에 남기 때문에 크게 걱정할 수준은 아니라고 봅니다.

접속 로그

2. WinForm 원격 디버깅에서와 마찬가지로 VC++ 응용 프로그램을 원격 PC에 복사합니다.

3. Visual C++도, WinForm 원격 디버깅과 마찬가지로 "Attach to Process..." 기능은 그대로 사용이 가능합니다. 단지 다른 것이 하나 있다면, "전송 모드" 설정을 "TCP/IP(네이티브 전용)" 또는 "파이프(네이티브 전용)"으로 설정해야 한다는 차이만 있습니다.

4. "F5 디버깅" 역시 WinForm 원격 디버깅과 크게 다르지 않습니다. "프로젝트 속성창"에서 다음과 같이 설정해 주면 됩니다.
   연결 : [원격지 컴퓨터에서 실행한 msvcmon.exe 연결 방식을 지정]
   원격 컴퓨터 : [원격 컴퓨터 명 또는 IP]
   원격 명령 : [원격 PC에 복사한 VC++ 응용 프로그램의 경로]
예를 들어, 다음 화면과 같이 지정해 주시면 됩니다.

MFC 원격 디버그 설정

5. 이걸로 설정은 끝이 납니다. "F5" 키를 누르면 VS.NET 2003은 원격지 컴퓨터에서 해당 프로그램을 구동시키고 VS.NET 디버거와 연결시킵니다.
여기까지 VS.NET 2003에서의 원격 디버깅 설정을 마쳤습니다.
[연관 글]






[최초 등록일: ]
[최종 수정일: 6/25/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 46  47  48  49  50  51  52  53  54  [55]  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
12564정성태3/16/202114317VS.NET IDE: 160. 새 프로젝트 창에 C++/CLI 프로젝트 템플릿이 없는 경우
12563정성태3/16/202117196개발 환경 구성: 551. C# - JIRA REST API 사용 정리 (3) jira-oauth-cli 도구를 이용한 키 관리
12562정성태3/15/202117967개발 환경 구성: 550. C# - JIRA REST API 사용 정리 (2) JIRA OAuth 토큰으로 API 사용하는 방법파일 다운로드1
12561정성태3/12/202116725VS.NET IDE: 159. Visual Studio에서 개행(\n, \r) 등의 제어 문자를 치환하는 방법 - 정규 표현식 사용
12560정성태3/11/202117744개발 환경 구성: 549. ssh-keygen으로 생성한 PKCS#1 개인키/공개키 파일을 각각 PKCS8/PEM 형식으로 변환하는 방법
12559정성태3/11/202118014.NET Framework: 1028. 닷넷 5 환경의 Web API에 OpenAPI 적용을 위한 NSwag 또는 Swashbuckle 패키지 사용 [2]파일 다운로드1
12558정성태3/10/202117116Windows: 192. Power Automate Desktop (Preview) 소개 - Bitvise SSH Client 제어 [1]
12557정성태3/10/202115342Windows: 191. 탐색기의 보안 탭에 있는 "Object name" 경로에 LEFT-TO-RIGHT EMBEDDING 제어 문자가 포함되는 문제
12556정성태3/9/202113581오류 유형: 703. PowerShell ISE의 Debug / Toggle Breakpoint 메뉴가 비활성 상태인 경우
12555정성태3/8/202116896Windows: 190. C# - 레지스트리에 등록된 DigitalProductId로부터 라이선스 키(Product Key)를 알아내는 방법파일 다운로드2
12554정성태3/8/202116457.NET Framework: 1027. 닷넷 응용 프로그램을 위한 PDB 옵션 - full, pdbonly, portable, embedded
12553정성태3/5/202116438개발 환경 구성: 548. 기존 .NET Framework 프로젝트를 .NET Core/5+ 용으로 변환해 주는 upgrade-assistant, try-convert 도구 소개 [4]
12552정성태3/5/202115893개발 환경 구성: 547. github workflow/actions에서 Visual Studio Marketplace 패키지 등록하는 방법
12551정성태3/5/202114280오류 유형: 702. 비주얼 스튜디오 - The 'CascadePackage' package did not load correctly. (2)
12550정성태3/5/202113999오류 유형: 701. Live Share 1.0.3713.0 버전을 1.0.3884.0으로 업데이트 이후 ContactServiceModelPackage 오류 발생하는 문제
12549정성태3/4/202115306오류 유형: 700. VsixPublisher를 이용한 등록 시 다양한 오류 유형 해결책
12548정성태3/4/202116416개발 환경 구성: 546. github workflow/actions에서 nuget 패키지 등록하는 방법
12547정성태3/3/202117072오류 유형: 699. 비주얼 스튜디오 - The 'CascadePackage' package did not load correctly.
12546정성태3/3/202116918개발 환경 구성: 545. github workflow/actions에서 빌드시 snk 파일 다루는 방법 - Encrypted secrets
12545정성태3/2/202119760.NET Framework: 1026. 닷넷 5에 추가된 POH (Pinned Object Heap) [10]
12544정성태2/26/202119964.NET Framework: 1025. C# - Control의 Invalidate, Update, Refresh 차이점 [2]
12543정성태2/26/202117963VS.NET IDE: 158. C# - 디자인 타임(design-time)과 런타임(runtime)의 코드 실행 구분
12542정성태2/20/202119634개발 환경 구성: 544. github repo의 Release 활성화 및 Actions를 이용한 자동화 방법 [1]
12541정성태2/18/202117193개발 환경 구성: 543. 애저듣보잡 - Github Workflow/Actions 소개
12540정성태2/17/202118293.NET Framework: 1024. C# - Win32 API에 대한 P/Invoke를 대신하는 Microsoft.Windows.CsWin32 패키지
12539정성태2/16/202118218Windows: 189. WM_TIMER의 동작 방식 개요파일 다운로드1
... 46  47  48  49  50  51  52  53  54  [55]  56  57  58  59  60  ...