Instrukcje: Debugowanie aplikacji usług systemu WindowsHow to: Debug Windows Service Applications

Usługa musi być uruchamiane w kontekście Menedżera sterowania usługami, a nie z poziomu programu Visual Studio.A service must be run from within the context of the Services Control Manager rather than from within Visual Studio. Z tego powodu debugowanie usługi jest tak proste jak debugowanie innych typów aplikacji Visual Studio.For this reason, debugging a service is not as straightforward as debugging other Visual Studio application types. Aby debugować usługę, należy uruchomić usługę i następnie dołączyć debuger do procesu, w którym jest uruchomiony.To debug a service, you must start the service and then attach a debugger to the process in which it is running. Następnie można debugować aplikację za pomocą wszystkich standardowych funkcji debugowania programu Visual Studio.You can then debug your application by using all of the standard debugging functionality of Visual Studio.

Przestroga

Nie należy dołączać do procesu, chyba że wiesz, co ten proces i rozumiesz, jakie skutki dołączenia i ewentualne skutki zniszczenia tego procesu.You should not attach to a process unless you know what the process is and understand the consequences of attaching to and possibly killing that process. Na przykład jeśli dołączyć do procesu WinLogon, a następnie zatrzymasz debugowanie, system zatrzyma się, ponieważ nie może działać bez usługi WinLogon.For example, if you attach to the WinLogon process and then stop debugging, the system will halt because it can’t operate without WinLogon.

Można dołączyć debuger, tylko do czynnej usługi.You can attach the debugger only to a running service. Proces załącznika przerywa bieżące działanie usługi; faktycznie nie zatrzymać lub wstrzymać przetwarzania usługi.The attachment process interrupts the current functioning of your service; it doesn’t actually stop or pause the service's processing. Oznacza to jeśli usługa jest uruchomiona, po rozpoczęciu debugowania, jest technicznie nadal w stanie uruchomiona podczas jej debugowania, ale jej przetwarzanie jest wstrzymane.That is, if your service is running when you begin debugging, it is still technically in the Started state as you debug it, but its processing has been suspended.

Po dołączeniu do procesu, możesz ustawić punkty przerwania i ich użyć do debugowania kodu.After attaching to the process, you can set breakpoints and use these to debug your code. Po zamknięciu okna dialogowego, które służy do dołączania do procesu, jesteś w trybie debugowania.Once you exit the dialog box you use to attach to the process, you are effectively in debug mode. Aby uruchomić, zatrzymać, wstrzymać lub kontynuować usługę, w tym samym osiągając ustawione punkty przerwania, można użyć Menedżera sterowania usługami.You can use the Services Control Manager to start, stop, pause and continue your service, thus hitting the breakpoints you've set. Po pomyślnym debugowaniu, można później usunąć tę fikcyjną usługę.You can later remove this dummy service after debugging is successful.

W tym artykule opisano profilowanie to usługa, która jest uruchomiona na komputerze lokalnym, ale można również debugować usług Windows, które są uruchomione na komputerze zdalnym.This article covers debugging a service that's running on the local computer, but you can also debug Windows Services that are running on a remote computer. Zobacz zdalne debugowanie.See Remote Debugging.

Uwaga

Debugowanie OnStart metoda może być trudne, ponieważ Menedżera sterowania usługami nakłada limit 30-sekundowy na wszystkie próby uruchomienia usługi.Debugging the OnStart method can be difficult because the Services Control Manager imposes a 30-second limit on all attempts to start a service. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów: Debugowanie usług Windows.For more information, see Troubleshooting: Debugging Windows Services.

Ostrzeżenie

Aby uzyskać istotne informacje dotyczące debugowania, debuger programu Visual Studio musi znaleźć pliki symboli dla plików binarnych, które są debugowane.To get meaningful information for debugging, the Visual Studio debugger needs to find symbol files for the binaries that are being debugged. Jeśli debugujesz to usługa, która jest wbudowana w programie Visual Studio, plików symboli (pliki .pdb) znajdują się w tym samym folderze co plik wykonywalny lub biblioteka i debuger ładuje je automatycznie.If you are debugging a service that you built in Visual Studio, the symbol files (.pdb files) are in the same folder as the executable or library, and the debugger loads them automatically. Jeśli debugujesz usługa, która nie została skompilowana, należy najpierw Znajdź symbole dla usługi i upewnij się, że są one przez debuger.If you are debugging a service that you didn't build, you should first find symbols for the service and make sure they can be found by the debugger. Zobacz Określ symboli (.pdb) i pliki w debugerze programu Visual Studio źródłowe.See Specify Symbol (.pdb) and Source Files in the Visual Studio Debugger. Jeśli debugowanie procesów systemowych lub mają symbole dla wywołania systemowe w usługach, należy dodać serwery symboli firmy Microsoft.If you're debugging a system process or want to have symbols for system calls in your services, you should add the Microsoft Symbol Servers. Zobacz symboli debugowania.See Debugging Symbols.

Aby debugować usługęTo debug a service

  1. Tworzenie usługi w konfiguracji debugowania.Build your service in the Debug configuration.

  2. Zainstaluj swoje usługi.Install your service. Aby uzyskać więcej informacji, zobacz jak: Instalowanie i odinstalowywanie usług.For more information, see How to: Install and Uninstall Services.

  3. Uruchom usługę z Menedżera sterowania usługami, Eksploratora serwera, lub z kodu.Start your service, either from Services Control Manager, Server Explorer, or from code. Aby uzyskać więcej informacji, zobacz jak: Uruchamianie usług.For more information, see How to: Start Services.

  4. Uruchom program Visual Studio przy użyciu poświadczeń administracyjnych, dzięki czemu możesz dołączyć do procesów systemowych.Start Visual Studio with administrative credentials so you can attach to system processes.

  5. (Opcjonalnie) Na pasku menu programu Visual Studio, wybierz narzędzia, opcje.(Optional) On the Visual Studio menu bar, choose Tools, Options. W opcje okna dialogowego wybierz debugowanie, symbole, wybierz opcję serwery symboli firmy Microsoft pole wyboru, a następnie wybierz pozycję OK przycisku.In the Options dialog box, choose Debugging, Symbols, select the Microsoft Symbol Servers check box, and then choose the OK button.

  6. Na pasku menu wybierz dołączyć do procesu z debugowania lub narzędzia menu.On the menu bar, choose Attach to Process from the Debug or Tools menu. (Klawiatura: Ctrl+Alt+P)(Keyboard: Ctrl+Alt+P)

    Procesy pojawi się okno dialogowe.The Processes dialog box appears.

  7. Wybierz Pokaż procesy wszystkich użytkowników pole wyboru.Select the Show processes from all users check box.

  8. W dostępne procesy sekcji, wybierz proces danej usługi, a następnie wybierz Dołącz.In the Available Processes section, choose the process for your service, and then choose Attach.

    Porada

    Proces będzie mieć taką samą nazwę jak plik wykonywalny dla usługi.The process will have the same name as the executable file for your service.

    Dołączyć do procesu pojawi się okno dialogowe.The Attach to Process dialog box appears.

  9. Wybierz odpowiednie opcje, a następnie wybierz OK aby zamknąć okno dialogowe.Choose the appropriate options, and then choose OK to close the dialog box.

    Uwaga

    Jesteś teraz w trybie debugowania.You are now in debug mode.

  10. Ustaw wszelkie punkty przerwania, którego chcesz użyć w kodzie.Set any breakpoints you want to use in your code.

  11. Dostęp do Menedżera sterowania usługami i manipulowania Twojej usługi, wysyłając polecenia Zatrzymaj, Wstrzymaj i Kontynuuj do punktów przerwania.Access the Services Control Manager and manipulate your service, sending stop, pause, and continue commands to hit your breakpoints. Aby uzyskać więcej informacji na temat uruchamiania Menedżera sterowania usługami, zobacz jak: Uruchamianie usług.For more information about running the Services Control Manager, see How to: Start Services. Zobacz też Rozwiązywanie problemów: Debugowanie usług Windows.Also, see Troubleshooting: Debugging Windows Services.

Wskazówki dotyczące debugowania dla usług WindowsDebugging Tips for Windows Services

Dołączanie do procesu usługi pozwala debugować większość, ale nie wszystkie kod dla tej usługi.Attaching to the service's process allows you to debug most, but not all, the code for that service. Na przykład, ponieważ usługa została już uruchomiona, nie można debugować kodu w usłudze OnStart metody lub kod w Main metodę, która jest używana do ładowania usługi w ten sposób.For example, because the service has already been started, you cannot debug the code in the service's OnStart method or the code in the Main method that is used to load the service this way. Jednym ze sposobów obejścia tego ograniczenia jest utworzyć tymczasowej drugiej usługi w aplikacji usługi, która istnieje tylko do pomocy w debugowaniu.One way to work around this limitation is to create a temporary second service in your service application that exists only to aid in debugging. Można zainstalować obie usługi, a następnie uruchom tę fikcyjną usługę, aby załadować procesu usługi.You can install both services, and then start this dummy service to load the service process. Po rozpoczęciu procesu tymczasowej usługi można użyć debugowania menu w programie Visual Studio, aby dołączyć do procesu usługi.Once the temporary service has started the process, you can use the Debug menu in Visual Studio to attach to the service process.

Spróbuj dodać wywołania Sleep metody akcji opóźniania, dopóki nie można dołączyć do procesu.Try adding calls to the Sleep method to delay action until you’re able to attach to the process.

Spróbuj zmienić program w aplikacji konsolowej regularne.Try changing the program to a regular console application. Aby to zrobić, napisz ponownie Main metody w następujący sposób, dzięki czemu może działać jako usługa Windows i jako aplikację konsolową w języku, w zależności od sposobu uruchamiania.To do this, rewrite the Main method as follows so it can run both as a Windows Service and as a console application, depending on how it's started.

Instrukcje: Uruchom usługę Windows jako aplikację konsolową w językuHow to: Run a Windows Service as a console application

  1. Dodaj metodę z uruchomioną usługą OnStart i OnStop metody:Add a method to your service that runs the OnStart and OnStop methods:

    internal void TestStartupAndStop(string[] args)  
    {  
        this.OnStart(args);  
        Console.ReadLine();  
        this.OnStop();  
    }  
    
  2. Ponowne zapisywanie adresów Main metody w następujący sposób:Rewrite the Main method as follows:

    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. W aplikacji na karcie właściwości projektu, ustaw typ danych wyjściowych do aplikację Konsolową.In the Application tab of the project's properties, set the Output type to Console Application.

  4. Wybierz Rozpocznij debugowanie (F5).Choose Start Debugging (F5).

  5. Aby ponownie uruchomić program jako usługę Windows, należy go zainstalować i uruchomić go w zwykły sposób usługi Windows.To run the program as a Windows Service again, install it and start it as usual for a Windows Service. Nie jest konieczne zmiany można cofnąć.It's not necessary to reverse these changes.

W niektórych przypadkach, np. Jeśli chcesz debugować problem, który występuje tylko podczas uruchamiania systemu należy użyć debugera Windows.In some cases, such as when you want to debug an issue that occurs only on system startup, you have to use the Windows debugger. Pobierz zestaw Windows Driver Kit (WDK) zobaczyć sposób debugowania usług Windows.Download the Windows Driver Kit (WDK) and see How to debug Windows Services.

Zobacz takżeSee also