다음을 통해 공유


방법: Windows 서비스 응용 프로그램 디버깅

서비스는 Visual Studio가 아닌 서비스 제어 관리자의 컨텍스트에서 실행되어야 하기 때문에 서비스 디버깅은 다른 Visual Studio 응용 프로그램 형식의 디버깅처럼 간단하지 않습니다. 서비스를 디버깅하려면 먼저 서비스를 시작한 다음 서비스를 실행하는 프로세스에 디버거를 연결해야 합니다. 그러면 Visual Studio의 모든 표준 디버깅 기능을 사용하여 응용 프로그램을 디버깅할 수 있습니다.

경고

프로세스의 종류와 연결 결과를 이해하지 못한 상태에서 프로세스에 연결하면 프로세스가 중지될 수도 있으므로 프로세스에 연결하지 마십시오. 예를 들어, WinLogon 프로세스에 연결한 다음 디버깅을 중단하면 시스템이 WinLogon 없이 작동할 수 없기 때문에 시스템이 중단됩니다.

실행 중인 서비스에만 디버거를 연결할 수 있습니다. 연결 프로세스는 서비스의 현재 작동을 중단시키지만 실제로 서비스의 처리를 중지하거나 일시 중지하지는 않습니다. 즉 디버깅을 시작할 때 서비스가 실행 중이면 디버깅하는 동안 서비스가 기술적으로는 시작된 상태이지만 서비스의 처리는 중단됩니다.

서비스의 프로세스에 연결하여 대부분의 서비스 코드를 디버깅할 수 있지만 모든 서비스 코드를 디버깅할 수 있는 것은 아닙니다. 예를 들어, 서비스가 이미 시작되었기 때문에 서비스의 OnStart 메서드에 있는 코드를 디버깅할 수 없고 서비스를 로드하는 데 사용되는 Main 메서드에 있는 코드도 디버깅할 수 없습니다. 문제를 해결하는 방법 중 하나는 서비스 응용 프로그램에 디버깅을 보조하는 용도로만 사용할 임시 보조 서비스를 만드는 것입니다. 두 서비스를 모두 설치한 다음 이 "더미" 서비스를 시작하여 서비스 프로세스를 로드할 수 있습니다. 일단 임시 서비스가 이 프로세스를 시작하면 Visual Studio에 있는 디버그 메뉴를 사용하여 서비스 프로세스에 연결할 수 있습니다.

프로세스에 연결하고 나면, 중단점을 설정하고 그러한 중단점을 사용하여 코드를 디버깅할 수 있습니다. 프로세스에 연결하기 위한 대화 상자를 닫으면 곧바로 디버그 모드로 전환됩니다. 설정한 각 중단점에서 코드 실행이 멈추도록 서비스 제어 관리자를 통해 서비스를 시작, 중지, 일시 중지 또는 계속할 수 있습니다. 디버깅을 성공적으로 마친 후 이 더미 서비스를 제거합니다.

참고

Windows 서비스 관리자는 서비스를 시작하는 데 30초의 제한을 부과하기 때문에 OnStart 메서드를 디버깅하기 어렵습니다. 자세한 내용은 문제 해결: Windows 서비스 디버깅을 참조하십시오.

서비스를 디버깅하려면

  1. 서비스를 설치합니다. 자세한 내용은 방법: 서비스 설치 및 제거를 참조하십시오.

  2. 서비스 제어 관리자, 서버 탐색기 또는 코드에서 서비스를 시작합니다. 자세한 내용은 방법: 서비스 시작을 참조하십시오.

  3. Visual Studio의 디버그 메뉴에서 프로세스를 선택합니다.

    프로세스 대화 상자가 나타납니다.

  4. 시스템 프로세스 표시를 클릭합니다.

  5. 사용 가능한 프로세스섹션에서 서비스에 대한 프로세스를 클릭한 다음 연결을 클릭합니다.

    프로세스의 이름은 서비스의 실행 파일 이름과 같습니다.

    프로세스에 연결 대화 상자가 나타납니다.

  6. 적절한 옵션을 선택한 다음 확인을 클릭하여 대화 상자를 닫습니다.

    참고

    이제 디버그 모드가 실행됩니다.

  7. 코드에서 사용할 중단점을 설정합니다.

  8. 서비스 제어 관리자에 액세스하여 각 중단점에서 코드 실행을 멈추도록 서비스를 중지, 일시 중지, 계속하기 위한 명령을 보내어 서비스를 조작합니다. 서비스 제어 관리자 실행에 대한 자세한 내용은 방법: 서비스 시작을 참조하십시오.

참고 항목

작업

방법: 서비스 설치 및 제거

방법: 서비스 시작

개념

Windows 서비스 응용 프로그램 소개