지난 내용
[강좌로 보는 서비스 프로그래밍] 서비스란 무엇인가? [1/?]
[강좌로 보는 서비스 프로그래밍] 외적으로 보여지는 서비스 [2/?]
[강좌로 보는 서비스 프로그래밍] 설치와 제거 [3/?]
[강좌로 보는 서비스 프로그래밍] 가끔 쓸모있는 관련 함수들 [4/?]
[강좌로 보는 서비스 프로그래밍] 시작/중지/일시정지 [5/?]
[강좌로 보는 서비스 프로그래밍] 서비스의 본체 코딩 [6/?]
[강좌로 보는 서비스 프로그래밍] 서비스의 본체 코딩 Cont. [6/?]
[강좌로 보는 서비스 프로그래밍] 뼈다귀 서비스 코드 [7/?]

6장에서 서비스의 본문을 작성할 때 IsServiceMode() 라는 유틸성 함수를 이용하여, 비주얼 스튜디오에서 서비스 메인을
SCM에 등록하지 않고, 서비스 메인을 직접 호출하는 방식으로 콘솔 응용 프로그램 처럼 디버깅하는 방법을 제시하였다.

작업을 진행할 때 가장 빠르고, 편안하게 디버깅을 할 수 있기 때문에 동작 테스트는 거의 위 방식으로 진행을 한다.
하지만 실제로 서비스로 구동중이지 않으므로, 서비스의 이벤트를 제공받거나 하는 등의 테스트는 불가능하다.

기본적인 동작 테스트가 마친 상태에서 서비스로 등록하여 놓고, 구동 중인 상태에서의 디버깅 방법을 살펴본다면,
이미 아시는 분들도 계시겠지만, MSVS는 Process Attach 방식의 디버깅을 제공해 주므로 이것을 이용하는 것이다.

현재 MSVS 6.0 과, MSVS 2008 두가지 버전으로 개발툴을 사용하는 관계로 해당 두가지 툴로 구동중인 프로세스를
디버깅하는 방법을 처리해 보도록 할것이다.

1. MSVS 6.0 으로의 구동중인 프로세스 디버깅 ( 당연히 소스를 가지고 있는 상태를 기준으로 )
   A. 디버그 모드로 빌드된 것을 서비스에 등록하여 구동중인 것은 별도의 설정이 필요 없다.
   B. 릴리즈 모드로 빌드된 것이 서비스로 구동중일 경우는 다음과 같은 절차를 거쳐야 디버깅이 가능하다.

       가. 먼저 서비스를 중지 시킨다.

       나. 프로젝트의 속성 중에서 컴파일 부분의 다음과 같은 속성을 변경시킨다.
          



       다. 프로젝트의 속성 중에서 링크 부분의 다음과 같은 속성을 변경시킨다.
         
   

    라. 프로젝트를 리빌드 한 후, 빌드된 프로세스로 서비스를 등록 한 후 구동 시킨다.

C. 구동중인 프로세스를 디버깅 해보자.
    가. 메뉴에서 프로세스 어태칭 메뉴를 선택한다.
        


    나. 화면에서 현재 구동되고 있는 서비스 프로세스를 선택한다.
       


    다. 아래처럼 프로젝트 상태로 어태칭된 화면을 볼 수 있을 것이다.
       


   라. 위 그림 상태에서 Break Execution 버튼을 누르면, 아래처럼 콜스택이 활성화 되면서 실제 디버깅 모드로 진입한다.
       


   마. 콜스택을 이용하여, 소스 상태 디버깅과 마찬가지로 모든 작업을 진행할 수 있다.
       

2. MSVS 2008 로의 구동중인 프로세스 디버깅 ( 당연히 소스를 가지고 있는 상태를 기준으로 )
   A. 디버그 모드로 빌드된 것을 서비스에 등록하여 구동중인 것은 별도의 설정이 필요 없다.
   B. 릴리즈 모드로 빌드된 것이 서비스로 구동중일 경우는 다음과 같은 절차를 거쳐야 디버깅이 가능하다.

       가. 먼저 서비스를 중지 시킨다.

       나. 프로젝트의 속성 중에서 컴파일 부분과 링크 부분을 다음과 같이 변경시킨다.
         

   
       다. 프로젝트를 리빌드 한 후, 빌드된 프로세스로 서비스를 등록 한 후 구동 시킨다.

   C. 구동 중인 프로세스를 디버깅 해보자. 
      가. 메뉴에서 프로세스 어태칭 메뉴를 선택한다.
        


    나. 화면에서 현재 구동되고 있는 서비스 프로세스를 선택한다.
        


    다. 아래처럼 바로 디버깅 가능한 상태로 화면이 펼쳐진다. 2008은 이렇게 어태치한 프로세스를 디버깅에 사용하고,
         필요한 작업을 마치면 디태칭하여, 다시 복원 시키는 것도 가능하다 (  MSVS 6.0은 디태치 기능이 없음)
       


이 기능은 서비스 뿐만 아니라, 본인의 개발툴로 개발된 프로세스를 테스트할 때 언제든지 사용할 수 있는 방법입니다.

이러하게 프로세스를 가지고 디버깅 하게 되면, 실제로 외부에서 서비스에 중지 신호나, 일시 중지 등을 시도 하였을 때, 소스 내부에서
어떻게 반응하는지, 나의 처리가 제대로 되었는지.. 모든것이 가능해 집니다.

아래 그림은 서비스 매니저에서, 해당 서비스를 일시 중지 시켰을 때, 소스에 걸린 브레이크 포인가 동작하는 화면입니다.












+ Recent posts