Porady: debugowanie aplikacji usług systemu Windows

Uwaga

Ten artykuł nie dotyczy hostowanych usług na platformie .NET. Aby uzyskać najnowszą zawartość w usługach systemu Windows przy użyciu Microsoft.Extensions.Hosting.BackgroundService i szablonie usługi procesu roboczego, zobacz:

Usługa musi być uruchamiana z poziomu kontekstu Menedżera kontroli usług, a nie z poziomu programu Visual Studio. Z tego powodu debugowanie usługi nie jest tak proste, jak debugowanie innych typów aplikacji programu Visual Studio. Aby debugować usługę, musisz uruchomić usługę, a następnie dołączyć debuger do procesu, w którym jest uruchomiony. Następnie możesz debugować aplikację przy użyciu wszystkich standardowych funkcji debugowania programu Visual Studio.

Uwaga

Nie należy dołączać do procesu, chyba że wiesz, co to jest proces i zrozumieć konsekwencje dołączania do i ewentualnie zabijania tego procesu. Jeśli na przykład dołączysz do procesu WinLogon, a następnie zatrzymasz debugowanie, system zostanie zatrzymany, ponieważ nie może działać bez winLogon.

Debuger można dołączyć tylko do uruchomionej usługi. Proces załączników przerywa bieżące działanie usługi; nie zatrzymuje ani nie wstrzymuje przetwarzania usługi. Oznacza to, że jeśli usługa jest uruchomiona po rozpoczęciu debugowania, nadal jest technicznie w stanie Rozpoczęte podczas debugowania, ale jego przetwarzanie zostało zawieszone.

Po dołączeniu do procesu można ustawić punkty przerwania i użyć ich do debugowania kodu. Po zakończeniu okna dialogowego używanego do dołączania do procesu będziesz w trybie debugowania. Możesz użyć Menedżera kontroli usług, aby uruchomić, zatrzymać, wstrzymać i kontynuować usługę, co spowoduje trafienie ustawionych punktów przerwania. Później możesz usunąć tę fikcyjną usługę po pomyślnym debugowaniu.

W tym artykule opisano debugowanie usługi uruchomionej na komputerze lokalnym, ale można również debugować usługi systemu Windows uruchomione na komputerze zdalnym. Zobacz Debugowanie zdalne.

Uwaga

OnStart Debugowanie metody może być trudne, ponieważ Menedżer kontroli usług nakłada limit 30 sekund na wszystkie próby uruchomienia usługi. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów: debugowanie usług systemu Windows.

Ostrzeżenie

Aby uzyskać istotne informacje na temat debugowania, debuger programu Visual Studio musi znaleźć pliki symboli dla plików binarnych, które są debugowane. Jeśli debugujesz usługę utworzoną w programie Visual Studio, pliki symboli (pliki pdb) znajdują się w tym samym folderze co plik wykonywalny lub biblioteka, a debuger ładuje je automatycznie. Jeśli debugujesz usługę, której nie skompilujesz, najpierw znajdź symbole usługi i upewnij się, że można je znaleźć w debugerze. Zobacz Określanie symboli (pdb) i plików źródłowych w debugerze programu Visual Studio. Jeśli debugujesz proces systemowy lub chcesz mieć symbole dla wywołań systemowych w usługach, dodaj serwery symboli firmy Microsoft. Zobacz Debugowanie symboli.

Aby debugować usługę

  1. Skompiluj usługę w konfiguracji debugowania.

  2. Zainstaluj usługę. Aby uzyskać więcej informacji, zobacz Instrukcje: instalowanie i odinstalowywanie usług.

  3. Uruchom usługę z Poziomu Menedżera kontroli usług, Eksploratora serwera lub kodu. Aby uzyskać więcej informacji, zobacz Instrukcje: uruchamianie usług.

  4. Uruchom program Visual Studio przy użyciu poświadczeń administracyjnych, aby umożliwić dołączanie do procesów systemowych.

  5. (Opcjonalnie) Na pasku menu programu Visual Studio wybierz pozycję Narzędzia, Opcje. W oknie dialogowym Opcje wybierz pozycję Debugowanie, Symbole, zaznacz pole wyboru Serwery symboli firmy Microsoft, a następnie wybierz przycisk OK.

  6. Na pasku menu wybierz pozycję Dołącz do procesu z menu Debugowanie lub Narzędzia . (Klawiatura: Ctrl+Alt+P)

    Zostanie wyświetlone okno dialogowe Procesy .

  7. Zaznacz pole wyboru Pokaż procesy od wszystkich użytkowników.

  8. W sekcji Dostępne procesy wybierz proces usługi, a następnie wybierz pozycję Dołącz.

    Napiwek

    Proces będzie miał taką samą nazwę jak plik wykonywalny usługi.

    Zostanie wyświetlone okno dialogowe Dołączanie do procesu .

  9. Wybierz odpowiednie opcje, a następnie wybierz przycisk OK , aby zamknąć okno dialogowe.

    Uwaga

    Jesteś teraz w trybie debugowania.

  10. Ustaw wszystkie punkty przerwania, których chcesz użyć w kodzie.

  11. Uzyskaj dostęp do Menedżera kontroli usług i manipuluj usługą, wysyłaj polecenia zatrzymania, wstrzymywania i kontynuowania, aby trafić do punktów przerwania. Aby uzyskać więcej informacji na temat uruchamiania Menedżera kontroli usług, zobacz Instrukcje: uruchamianie usług. Zobacz też Rozwiązywanie problemów: debugowanie usług systemu Windows.

Debugowanie Wskazówki dla usług systemu Windows

Dołączanie do procesu usługi umożliwia debugowanie większości, ale nie wszystkich kodu dla tej usługi. Na przykład, ponieważ usługa została już uruchomiona, nie można debugować kodu w metodzie usługi lub kodu w Main metodzie używanej do załadowania usługi OnStart w ten sposób. Jednym ze sposobów obejścia tego ograniczenia jest utworzenie tymczasowej drugiej usługi w aplikacji usługi, która istnieje tylko w celu pomocy w debugowaniu. Możesz zainstalować obie usługi, a następnie uruchomić tę fikcyjną usługę, aby załadować proces usługi. Po uruchomieniu procesu usługi tymczasowej możesz użyć menu Debuguj w programie Visual Studio, aby dołączyć go do procesu usługi.

Spróbuj dodać wywołania do metody w Sleep celu opóźnienia akcji do momentu dołączenia do procesu.

Spróbuj zmienić program na zwykłą aplikację konsolową. W tym celu należy ponownie napisać Main metodę w następujący sposób, aby mogła działać zarówno jako usługa systemu Windows, jak i jako aplikacja konsolowa, w zależności od sposobu jej uruchomienia.

Instrukcje: uruchamianie usługi systemu Windows jako aplikacji konsolowej

  1. Dodaj metodę do usługi, która uruchamia OnStart metody i OnStop :

    internal void TestStartupAndStop(string[] args)  
    {  
        this.OnStart(args);  
        Console.ReadLine();  
        this.OnStop();  
    }  
    
  2. Ponownie zapisz metodę Main w następujący sposób:

    static void Main(string[] args)  
    {  
        if (Environment.UserInteractive)  
        {  
            MyNewService service1 = new MyNewService(args);  
            service1.TestStartupAndStop(args);  
        }  
        else  
        {  
            // Put the body of your old Main method here.  
        }  
    }
    
  3. Na karcie Aplikacja właściwości projektu ustaw typ danych wyjściowych na Wartość Aplikacja konsolowa.

  4. Wybierz pozycję Rozpocznij debugowanie (F5).

  5. Aby ponownie uruchomić program jako usługa systemu Windows, zainstaluj go i uruchom jak zwykle dla usługi systemu Windows. Nie jest konieczne odwrócenie tych zmian.

W niektórych przypadkach, takich jak w przypadku debugowania problemu, który występuje tylko podczas uruchamiania systemu, musisz użyć debugera systemu Windows. Pobierz zestaw sterowników systemu Windows (WDK) i zobacz Jak debugować usługi systemu Windows.

Zobacz też