( Windows Service Application Debugging ) 2007. 8. 24. (금) Presenter 박상진 바이러스 체이서(VirusChaser 실시간 감시 드라이버팀 개발자) 핵심 검색 단어 ( Keywords ) 1. Visual Studio Windows 서비스 응용 프로그램 디버깅 2. Windows 서비스 디버깅 3. Microsoft CLR Debugger 4. 비주얼 스튜디오 디버깅 방법 5. 디버깅 테크닉
디버그( Debug ) 오류 수정 프로그램과 그 작업을 통칭하는 말 디버깅( Debugging ) 작업에 중점을 둔 어휘 디버거( Debugger ) 프로그램의 오류를 발견하고 그 원인을 밝히는 작업 또는 그 프로그램.
.NET 환경(Visual Studio 2005 버전) Visual C++ 6.0 Windows 서비스 프로그램의 디버깅 Build > Start Debug > Attach to Process... 실행 방법 .NET 환경(Visual Studio 2005 버전) [그림 1] [그림 2]
주의 사항 서비스로 돌릴 프로젝트를 Debug 모드로 컴파일하고, 생성된 .exe 파일을 SCM(Service Control Manager)를 통해서 서비스 실행 서비스로 돌릴 프로그램 소스코드에서 Break point 설정 디버그 > 프로세스에 연결.. 실행중인 서비스 프로세스와 연결해서 디버깅 한다. * 서비스 프로그램은 SCM 에 의해서 실행되므로 디버깅이 안된다. -> 일반 응용 프로그램 처럼 -> 바로 실행 하지 않기 때문에 디버깅이 안된다. -> 그러므로 서비스 프로그램을 먼저 돌려놓고 -> Visual Studio .NET Tool 에서 디버그 > 프로세스 연결… 을 통해서 디버깅 가능하다. 이러한 이유로, Main 또는 OnStart 프로시저에서 코드를 디버그 할 수 없다. (소스 참고로 이해할 것 !!)
Main() OnStart 프로시저
주의 Sleep() 함수 사용할 것 !! Sleep() 함수를 사용하여 SCM(Service Control Manager)에 의해 실행된 서비스 프로그램 내의 디버깅할 Breakpoint 부분을 지나지 않게 해야 한다. 서비스 프로그램 소스 내에 Sleep() 함수를 넣어주어야 한다.
서비스 실행 프로그램 Main() 함수
첨가 Sleep() 함수 Break point 지정
서비스 프로그램의 디버깅이 가능하다
서비스 프로그램 실행 과정 Windows 서비스 응용 프로그램을 디버깅 할 때, 서비스와 SCM(Service Control Manager) 는 상호 작용합니다. -> SCM 은 -> OnStart() 를 호출하여 -> 서비스를 시작한 다음 -> OnStart() 가 반환될 때까지 30초를 기다립니다. -> 시간 안에 함수가 반환되지 않으면 -> SCM 은 서비스를 시작할 수 없다는 오류를 표시합니다. OnStart() 를 디버깅할 때는, 이 30초라는 시간에 유의 -> OnStart() 에 Break point 를 설정한 경우 -> 단계별 코드 실행이 30초 안에 이 함수까지 도달하지 않으면 SCM 에서 서비스를 시작하지 않는다.