자동으로 서비스 애플리케이션 디버깅
서비스 애플리케이션이 시작될 때 디버거를 자동으로 시작할 수 있습니다. 또는 서비스 애플리케이션에서 예외가 발생하거나 DebugBreak 명령을 실행할 때 자동으로 시작할 수 있습니다. 이러한 방법 중 하나를 선택한 경우 이 항목에서는 진행 방법을 설명합니다. 어떤 방법을 선택해야 할지 잘 모르는 경우 최상의 방법 선택을 참조하세요.
그런 다음, 다음 절차를 따릅니다.
다음 준비 단계 중 하나를 수행합니다.
- 초기화 코드를 포함하여 처음부터 서비스 애플리케이션을 디버그하려는 경우 초기화 코드 디버깅 사용에서 설명한 절차를 따릅니다. 또는 서비스 애플리케이션이 충돌하거나 예외가 발생할 때 디버거에 침입하도록 하려면 서비스 애플리케이션이 디버거에 침입하도록 설정에 설명된 절차를 따릅니다.
- 서비스 애플리케이션이 디버거를 제대로 실행할 수 있도록 하려면 서비스 애플리케이션 시간 제한 조정에 설명된 절차를 수행합니다.
- 서비스가 단일 SvcHost 프로세스에서 다른 서비스와 결합된 경우 서비스 격리에 설명된 절차를 수행합니다.
서비스가 이미 실행 중인 경우 이러한 변경 내용을 적용하려면 서비스를 다시 시작해야 합니다. 실행 중인 서비스의 영향을 제거하려면 Windows 자체를 다시 시작하는 것이 좋습니다. Windows를 다시 시작하지 않으려면 다음 명령을 사용합니다. 여기서 ServiceName 은 서비스의 이름입니다.
net stop ServiceName net start ServiceName
서비스 애플리케이션의 초기화 코드를 디버그하도록 선택한 경우 서비스가 시작될 때 디버거가 시작되고 서비스 애플리케이션에 연결됩니다.
예외에 의해 디버거를 트리거하도록 선택한 경우 서비스 애플리케이션은 예외가 발생하거나 DebugBreak 함수를 실행할 때까지 정상적으로 실행됩니다. 이 시점에서 디버거가 시작되고 서비스 애플리케이션에 연결됩니다.
다음 단계는 1단계에서 지정한 디버거 명령줄에 따라 달라집니다.
- 원격 옵션 없이 디버거를 지정한 경우 이 디버거가 시작되고 해당 창이 표시됩니다.
- -server 및 -noio 옵션을 사용하여 NTSD를 지정한 경우 콘솔 창 없이 NTSD가 시작됩니다. 그런 다음 , -remote 매개 변수를 사용하여 사용자 모드 디버거를 시작하여 다른 컴퓨터에서 디버깅 세션에 연결할 수 있습니다. 자세한 내용은 디버깅 클라이언트 활성화를 참조하세요.
- -d 옵션으로 NTSD를 지정한 경우 콘솔 창 없이 NTSD가 시작됩니다. 그런 다음 다른 컴퓨터에서 실행되는 커널 디버거를 사용하여 디버깅 세션에 연결할 수 있습니다. 자세한 내용은 커널 디버거에서 User-Mode 디버거 제어를 참조하세요.
- -ddefer 및 -server 옵션을 사용하여 NTSD를 지정한 경우 콘솔 창 없이 NTSD가 시작됩니다. 그런 다음, 서비스와 다른 컴퓨터에서 실행되는 커널 디버거와 사용자 모드 원격 디버거를 모두 사용하여 디버깅 세션에 연결할 수 있습니다(서로 동일한 컴퓨터일 수 있음). 자세한 내용은 이 메서드와 원격 디버깅 결합을 참조하세요.
디버거가 시작되면 서비스는 초기 프로세스 중단점, 예외 또는 DebugBreak 명령에서 일시 중지됩니다. 이렇게 하면 서비스 애플리케이션의 현재 상태를 검사하고 중단점을 설정하며 원하는 다른 구성을 선택할 수 있습니다.
g(Go) 또는 다른 실행 명령을 사용하여 서비스 애플리케이션의 실행을 다시 시작합니다.