Share via


Procedure: Fouten opsporen in Windows-servicetoepassingen

Notitie

Dit artikel is niet van toepassing op gehoste services in .NET. Zie voor de nieuwste inhoud van Windows-services die gebruikmaken van Microsoft.Extensions.Hosting.BackgroundService en de worker-servicesjabloon:

Een service moet worden uitgevoerd vanuit de context van Services Control Manager in plaats van vanuit Visual Studio. Daarom is foutopsporing van een service niet zo eenvoudig als het opsporen van fouten in andere Visual Studio-toepassingstypen. Als u fouten in een service wilt opsporen, moet u de service starten en vervolgens een foutopsporingsprogramma toevoegen aan het proces waarin deze wordt uitgevoerd. Vervolgens kunt u fouten opsporen in uw toepassing met behulp van alle standaardfunctionaliteit voor foutopsporing van Visual Studio.

Let op

U moet geen bijlage toevoegen aan een proces, tenzij u weet wat het proces is en begrijpt wat de gevolgen zijn van het koppelen aan en mogelijk doden van dat proces. Als u bijvoorbeeld koppelt aan het WinLogon-proces en vervolgens stopt met foutopsporing, stopt het systeem omdat het niet kan werken zonder WinLogon.

U kunt het foutopsporingsprogramma alleen koppelen aan een actieve service. Het bijlageproces onderbreekt de huidige werking van uw service; de verwerking van de service wordt niet gestopt of onderbroken. Als uw service wordt uitgevoerd wanneer u begint met foutopsporing, bevindt deze zich technisch gezien nog steeds in de status Gestart terwijl u fouten opspoort, maar de verwerking ervan is opgeschort.

Nadat u het proces hebt gekoppeld, kunt u onderbrekingspunten instellen en deze gebruiken om fouten in uw code op te sporen. Zodra u het dialoogvenster sluit dat u gebruikt om aan het proces te koppelen, bevindt u zich in de foutopsporingsmodus. U kunt Services Control Manager gebruiken om uw service te starten, stoppen, onderbreken en doorgaan, zodat u de onderbrekingspunten bereikt die u hebt ingesteld. U kunt deze dummy-service later verwijderen nadat de foutopsporing is geslaagd.

Dit artikel bevat informatie over het opsporen van fouten in een service die wordt uitgevoerd op de lokale computer, maar u kunt ook fouten opsporen in Windows Services die op een externe computer worden uitgevoerd. Zie Externe foutopsporing.

Notitie

Foutopsporing van de OnStart methode kan lastig zijn omdat Services Control Manager een limiet van 30 seconden oplegt voor alle pogingen om een service te starten. Zie Probleemoplossing: Foutopsporing in Windows Services voor meer informatie.

Waarschuwing

Voor zinvolle informatie over foutopsporing moet het foutopsporingsprogramma van Visual Studio symboolbestanden vinden voor de binaire bestanden die worden opgespoord. Als u fouten opspoort in een service die u in Visual Studio hebt gemaakt, bevinden de symboolbestanden (.pdb-bestanden) zich in dezelfde map als het uitvoerbare bestand of de bibliotheek en wordt deze automatisch geladen door het foutopsporingsprogramma. Als u fouten opspoort in een service die u niet hebt gebouwd, moet u eerst symbolen voor de service vinden en ervoor zorgen dat deze kunnen worden gevonden door het foutopsporingsprogramma. Zie Symbool opgeven (.pdb) en bronbestanden in het Visual Studio Debugger. Als u fouten in een systeemproces opspoort of symbolen wilt hebben voor systeemaanroepen in uw services, moet u de Microsoft Symbol Servers toevoegen. Zie Symbolen voor foutopsporing.

Fouten opsporen in een service

  1. Bouw uw service in de configuratie voor foutopsporing.

  2. Installeer uw service. Zie Voor meer informatie: Services installeren en verwijderen.

  3. Start uw service vanuit Services Control Manager, Server Explorer of vanuit code. Zie Voor meer informatie : Services starten.

  4. Start Visual Studio met beheerdersreferenties, zodat u aan systeemprocessen kunt koppelen.

  5. (Optioneel) Kies Extra, Opties in de menubalk van Visual Studio. Kies in het dialoogvenster Opties de optie Foutopsporing, Symbolen, schakel het selectievakje Microsoft Symboolservers in en kies vervolgens de knop OK.

  6. Kies In de menubalk de optie Bijvoegen bij proces in het menu Foutopsporing of Extra . (Toetsenbord: Ctrl+Alt+P)

    Het dialoogvenster Processen wordt weergegeven.

  7. Schakel het selectievakje Processen van alle gebruikers weergeven in.

  8. Kies in de sectie Beschikbare processen het proces voor uw service en kies Koppelen.

    Tip

    Het proces heeft dezelfde naam als het uitvoerbare bestand voor uw service.

    Het dialoogvenster Bijvoegen aan proces wordt weergegeven.

  9. Kies de juiste opties en kies VERVOLGENS OK om het dialoogvenster te sluiten.

    Notitie

    U bevindt zich nu in de foutopsporingsmodus.

  10. Stel eventuele onderbrekingspunten in die u in uw code wilt gebruiken.

  11. Open Services Control Manager en bewerk uw service, verzend stop- en pauzeer- en continue opdrachten om uw onderbrekingspunten te bereiken. Zie How to: Start Services voor meer informatie over het uitvoeren van Services Control Manager. Zie Ook probleemoplossing: Foutopsporing in Windows Services.

Tips voor foutopsporing voor Windows Services

Als u koppelt aan het proces van de service, kunt u fouten opsporen in de meeste, maar niet alle, de code voor die service. Omdat de service bijvoorbeeld al is gestart, kunt u geen fouten opsporen in de code in de methode van OnStart de service of de code in de Main methode die wordt gebruikt om de service op deze manier te laden. Een manier om deze beperking te omzeilen, is door een tijdelijke tweede service te maken in uw servicetoepassing die alleen bestaat voor foutopsporing. U kunt beide services installeren en deze dummy-service vervolgens starten om het serviceproces te laden. Zodra de tijdelijke service het proces heeft gestart, kunt u het menu Foutopsporing in Visual Studio gebruiken om het serviceproces te koppelen.

Probeer aanroepen toe te voegen aan de methode om de Sleep actie uit te stellen totdat u verbinding kunt maken met het proces.

Probeer het programma te wijzigen in een reguliere consoletoepassing. U doet dit door de Main methode als volgt te herschrijven, zodat deze zowel als een Windows-service als als een consoletoepassing kan worden uitgevoerd, afhankelijk van hoe deze wordt gestart.

Procedure: Een Windows-service uitvoeren als een consoletoepassing

  1. Voeg een methode toe aan uw service waarmee de OnStart en OnStop methoden worden uitgevoerd:

    internal void TestStartupAndStop(string[] args)  
    {  
        this.OnStart(args);  
        Console.ReadLine();  
        this.OnStop();  
    }  
    
  2. Herschrijf de Main methode als volgt:

    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. Stel op het tabblad Toepassing van de eigenschappen van het project het uitvoertype in op Consoletoepassing.

  4. Kies Foutopsporing starten (F5).

  5. Als u het programma opnieuw wilt uitvoeren als een Windows-service, installeert u het programma en start u het zoals gebruikelijk voor een Windows-service. Het is niet nodig om deze wijzigingen om te keren.

In sommige gevallen, bijvoorbeeld wanneer u fouten wilt opsporen in een probleem dat zich alleen voordoet bij het opstarten van het systeem, moet u het Windows-foutopsporingsprogramma gebruiken. Download de Windows Driver Kit (WDK) en zie Fouten opsporen in Windows Services.

Zie ook