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

비밀번호

댓글 작성자
 




1  2  3  4  5  6  7  8  9  10  11  12  13  [14]  15  ...
NoWriterDateCnt.TitleFile(s)
13297정성태3/26/20234725Windows: 235. Win32 - Code Modal과 UI Modal
13296정성태3/25/20234111Windows: 234. IsDialogMessage와 협업하는 WM_GETDLGCODE Win32 메시지 [1]파일 다운로드1
13295정성태3/24/20234352Windows: 233. Win32 - modeless 대화창을 modal처럼 동작하게 만드는 방법파일 다운로드1
13294정성태3/22/20234524.NET Framework: 2105. LargeAddressAware 옵션이 적용된 닷넷 32비트 프로세스의 가용 메모리 - 두 번째
13293정성태3/22/20234539오류 유형: 853. dumpbin - warning LNK4048: Invalid format file; ignored
13292정성태3/21/20234727Windows: 232. C/C++ - 일반 창에도 사용 가능한 IsDialogMessage파일 다운로드1
13291정성태3/20/20235058.NET Framework: 2104. C# Windows Forms - WndProc 재정의와 IMessageFilter 사용 시의 차이점
13290정성태3/19/20234588.NET Framework: 2103. C# - 윈도우에서 기본 제공하는 FindText 대화창 사용법파일 다운로드1
13289정성태3/18/20233816Windows: 231. Win32 - 대화창 템플릿의 2진 리소스를 읽어들여 자식 윈도우를 생성하는 방법파일 다운로드1
13288정성태3/17/20233935Windows: 230. Win32 - 대화창의 DLU 단위를 pixel로 변경하는 방법파일 다운로드1
13287정성태3/16/20234093Windows: 229. Win32 - 대화창 템플릿의 2진 리소스를 읽어들여 윈도우를 직접 띄우는 방법파일 다운로드1
13286정성태3/15/20234558Windows: 228. Win32 - 리소스에 포함된 대화창 Template의 2진 코드 해석 방법
13285정성태3/14/20234091Windows: 227. Win32 C/C++ - Dialog Procedure를 재정의하는 방법파일 다운로드1
13284정성태3/13/20234344Windows: 226. Win32 C/C++ - Dialog에서 값을 반환하는 방법파일 다운로드1
13283정성태3/12/20233783오류 유형: 852. 파이썬 - TypeError: coercing to Unicode: need string or buffer, NoneType found
13282정성태3/12/20234100Linux: 58. WSL - nohup 옵션이 필요한 경우
13281정성태3/12/20234119Windows: 225. 윈도우 바탕화면의 아이콘들이 넓게 퍼지는 경우 [2]
13280정성태3/9/20234870개발 환경 구성: 670. WSL 2에서 호스팅 중인 TCP 서버를 외부에서 접근하는 방법
13279정성태3/9/20234333오류 유형: 851. 파이썬 ModuleNotFoundError: No module named '_cffi_backend'
13278정성태3/8/20234375개발 환경 구성: 669. WSL 2의 (init이 아닌) systemd 지원 [1]
13277정성태3/6/20235090개발 환경 구성: 668. 코드 사인용 인증서 신청 및 적용 방법(예: Digicert)
13276정성태3/5/20234757.NET Framework: 2102. C# 11 - ref struct/ref field를 위해 새롭게 도입된 scoped 예약어
13275정성태3/3/20234969.NET Framework: 2101. C# 11의 ref 필드 설명
13274정성태3/2/20234556.NET Framework: 2100. C# - ref 필드로 ref struct 타입을 허용하지 않는 이유
13273정성태2/28/20234328.NET Framework: 2099. C# - 관리 포인터로서의 ref 예약어 의미
13272정성태2/27/20234569오류 유형: 850. SSMS - mdf 파일을 Attach 시킬 때 Operating system error 5: "5(Access is denied.)" 에러
1  2  3  4  5  6  7  8  9  10  11  12  13  [14]  15  ...