.NET General2007. 2. 6. 15:05
윈도우즈 서비스로 만든 닷넷 모듈에 문제가 생겨서 디버깅할 일이 있었다. 알다시피 윈도우 어플리케이션은 일반 닷넷 어플리케이션처럼 확장자는 exe이지만, 독립적으로는 실행되지 않고, 서비스에 등록되어서 실행되게 된다.

그래서 디버깅을 하기 위해서는 Visual Studio의 프로세스 디버깅 기능을 이용해야 한다. 즉 아래 그림처럼 서비스의 프로세스를 비주얼 스튜디오 디버깅 메뉴에서 직접 연결해서 디버깅하는 것이다.

사용자 삽입 이미지


그런데 오늘은 위 방법을 쓰기가 힘든 상황이 발생했다. 왜냐하면, 초기 작업에 문제가 있었던지 서비스 시작이 아예 되질 않는 거다..-_-;; 서비스 시작이 되질 않으니 프로세스를 디버깅할 수가 없는 문제가 발생했다.

결국 난감한 상황에서 언제나 한줄기 빛을 던져주시는(^^;;) 구글님에게 문의를 해보았고, 원하던 답을 찾을 수가 있었다. http://weblogs.asp.net/paulballard/archive/2005/07/12/419175.aspx 즉, 윈도우 서비스 초기화 코드에 아예 아래 코드처럼 디버깅을 시작할 수 있는 코드를 삽입하는 것이다.

<MTAThread()> _
Shared Sub Main()

#If DEBUG Then
        System.Diagnostics.Debugger.Launch()
#End If


이렇게 컴파일된 모듈을 서비스 MMC에서 시작시키면, 아래 그림처럼 디버깅 윈도우가 뜨고 비주얼 스튜디오를 이용해서 디버깅할 수가 있다.

사용자 삽입 이미지


내가 참조한 포스트의 저자는 Debugger.Break()을 사용해서 중단점을 걸면 된다고 말하고 있지만, 물론 컴파일할 때에 비주얼 스튜디오에서 중단점을 걸어놓는다면, 그것도 작동된다.
Posted by kkongchi