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

비밀번호

댓글 작성자
 




... 61  62  63  64  65  66  67  [68]  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
12237정성태6/20/202017754.NET Framework: 912. 리눅스 환경의 .NET Core에서 "test".IndexOf("\0")가 0을 반환
12236정성태6/19/202018470오류 유형: 621. .NET Standard 대상으로 빌드 시 dynamic 예약어에서 컴파일 오류 - error CS0656: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'
12235정성태6/19/202017611오류 유형: 620. Windows 10 - Inaccessible boot device 블루 스크린
12234정성태6/19/202016997개발 환경 구성: 494. NuGet - nuspec의 패키지 스키마 버전(네임스페이스) 업데이트 방법
12233정성태6/19/202017559오류 유형: 619. SQL 서버 - The transaction log for database '...' is full due to 'LOG_BACKUP'. - 두 번째 이야기
12232정성태6/19/202016213오류 유형: 618. SharePoint - StoreBusyRetryLater 오류
12231정성태6/15/202019495.NET Framework: 911. Console/Service Application을 위한 SynchronizationContext - AsyncContext
12230정성태6/15/202018353오류 유형: 617. IMetaDataImport::GetMethodProps가 반환하는 IL 코드 주소(RVA) 문제
12229정성태6/13/202020244.NET Framework: 910. USB/IP PROJECT를 이용해 C#으로 USB Keyboard + Mouse 가상 장치 만들기 [1]
12228정성태6/12/202019571.NET Framework: 909. C# - Source Generator를 적용한 XmlCodeGenerator파일 다운로드1
12227정성태6/12/202023497오류 유형: 616. Visual Studio의 느린 업데이트 속도에 대한 원인 분석 [5]
12226정성태6/11/202021580개발 환경 구성: 493. OpenVPN의 네트워크 구성 [4]파일 다운로드1
12225정성태6/11/202019507개발 환경 구성: 492. 윈도우에 OpenVPN 설치 - 클라이언트 측 구성
12224정성태6/11/202028243개발 환경 구성: 491. 윈도우에 OpenVPN 설치 - 서버 측 구성 [1]
12223정성태6/9/202023936.NET Framework: 908. C# - Source Generator 소개 [10]파일 다운로드2
12222정성태6/3/202017410VS.NET IDE: 146. error information: "CryptQueryObject" (-2147024893/0x80070003)
12221정성태6/3/202017161Windows: 170. 비어 있지 않은 디렉터리로 symbolic link(junction) 연결하는 방법
12220정성태6/3/202020925.NET Framework: 907. C# DLL로부터 TLB 및 C/C++ 헤더 파일(TLH)을 생성하는 방법
12219정성태6/1/202019782.NET Framework: 906. C# - lock (this), lock (typeof(...))를 사용하면 안 되는 이유파일 다운로드1
12218정성태5/27/202019154.NET Framework: 905. C# - DirectX 게임 클라이언트 실행 중 키보드 입력을 감지하는 방법 [3]
12217정성태5/24/202017230오류 유형: 615. Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.
12216정성태5/15/202020778.NET Framework: 904. USB/IP PROJECT를 이용해 C#으로 USB Keyboard 가상 장치 만들기 [14]파일 다운로드1
12215정성태5/12/202026725개발 환경 구성: 490. C# - (Wireshark의) USBPcap을 이용한 USB 패킷 모니터링 [10]파일 다운로드1
12214정성태5/5/202018428개발 환경 구성: 489. 정식 인증서가 있는 경우 Device Driver 서명하는 방법 (2) - UEFI/SecureBoot [1]
12213정성태5/3/202019556개발 환경 구성: 488. (User-mode 코드로 가상 USB 장치를 만들 수 있는) USB/IP PROJECT 소개
12212정성태5/1/202016759개발 환경 구성: 487. UEFI / Secure Boot 상태인지 확인하는 방법
... 61  62  63  64  65  66  67  [68]  69  70  71  72  73  74  75  ...