Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 3.1. VS.NET 2003 원격 디버깅 설정 [링크 복사], [링크+제목 복사],
조회: 26122
글쓴 사람
정성태 (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

비밀번호

댓글 작성자
 




... 76  77  78  79  80  81  82  [83]  84  85  86  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
11862정성태4/7/201920165개발 환경 구성: 437. .NET EXE의 ASLR 기능을 끄는 방법
11861정성태4/6/201919626디버깅 기술: 126. windbg - .NET x86 CLR2/CLR4 EXE의 EntryPoint
11860정성태4/5/201923482오류 유형: 527. Visual C++ 컴파일 오류 - error C2220: warning treated as error - no 'object' file generated
11859정성태4/4/201920703디버깅 기술: 125. WinDbg로 EXE의 EntryPoint에서 BP 거는 방법
11858정성태3/27/201921617VC++: 129. EXE를 LoadLibrary로 로딩해 PE 헤더에 있는 EntryPoint를 직접 호출하는 방법파일 다운로드1
11857정성태3/26/201919521VC++: 128. strncpy 사용 시 주의 사항(Linux / Windows)
11856정성태3/25/201919774VS.NET IDE: 134. 마이크로소프트의 CoreCLR 프로파일러 리눅스 예제를 Visual Studio F5 원격 디버깅하는 방법 [1]파일 다운로드1
11855정성태3/25/201921936개발 환경 구성: 436. 페이스북 HTTPS 인증을 localhost에서 테스트하는 방법
11854정성태3/25/201917584VS.NET IDE: 133. IIS Express로 호스팅하는 사이트를 https로 접근하는 방법
11853정성태3/24/201920392개발 환경 구성: 435. 존재하지 않는 IP 주소에 대한 Dns.GetHostByAddress/gethostbyaddr/GetNameInfoW 실행이 느리다면? - 두 번째 이야기 [1]
11852정성태3/20/201919614개발 환경 구성: 434. 존재하지 않는 IP 주소에 대한 Dns.GetHostByAddress/gethostbyaddr/GetNameInfoW 실행이 느리다면?파일 다운로드1
11851정성태3/19/201923361Linux: 8. C# - 리눅스 환경에서 DllImport 대신 라이브러리 동적 로드 처리 [2]
11850정성태3/18/201922406.NET Framework: 813. C# async 메서드에서 out/ref/in 유형의 인자를 사용하지 못하는 이유
11849정성태3/18/201921773.NET Framework: 812. pscp.exe 기능을 C#으로 제어하는 방법파일 다운로드1
11848정성태3/17/201918507스크립트: 14. 윈도우 CMD - 파일이 변경된 경우 파일명을 변경해 복사하고 싶다면?
11847정성태3/17/201922974Linux: 7. 리눅스 C/C++ - 공유 라이브러리 동적 로딩 후 export 함수 사용 방법파일 다운로드1
11846정성태3/15/201921624Linux: 6. getenv, setenv가 언어/운영체제마다 호환이 안 되는 문제
11845정성태3/15/201921763Linux: 5. Linux 응용 프로그램의 (C++) so 의존성 줄이기(ReleaseMinDependency) [3]
11844정성태3/14/201923086개발 환경 구성: 434. Visual Studio 2019 - 리눅스 프로젝트를 이용한 공유/실행(so/out) 프로그램 개발 환경 설정 [1]파일 다운로드1
11843정성태3/14/201918038기타: 75. MSDN 웹 사이트를 기본으로 영문 페이지로 열고 싶다면?
11842정성태3/13/201916390개발 환경 구성: 433. 마이크로소프트의 CoreCLR 프로파일러 예제를 Visual Studio CMake로 빌드하는 방법 [1]파일 다운로드1
11841정성태3/13/201916696VS.NET IDE: 132. Visual Studio 2019 - CMake의 컴파일러를 기본 g++에서 clang++로 변경
11840정성태3/13/201918320오류 유형: 526. 윈도우 10 Ubuntu App 환경에서는 USB 외장 하드 접근 불가
11839정성태3/12/201922249디버깅 기술: 124. .NET Core 웹 앱을 호스팅하는 Azure App Services의 프로세스 메모리 덤프 및 windbg 분석 개요 [3]
11838정성태3/7/201925880.NET Framework: 811. (번역글) .NET Internals Cookbook Part 1 - Exceptions, filters and corrupted processes [1]파일 다운로드1
11837정성태3/6/201939810기타: 74. 도서: 시작하세요! C# 7.3 프로그래밍 [10]
... 76  77  78  79  80  81  82  [83]  84  85  86  87  88  89  90  ...