Dela via


Anvisningar: Felsöka Windows-tjänstprogram

Kommentar

Den här artikeln gäller inte för värdbaserade tjänster i .NET. Det senaste innehållet i Windows-tjänster med hjälp av Microsoft.Extensions.Hosting.BackgroundService och arbetstjänstmallen finns i:

En tjänst måste köras inifrån kontexten för Services Control Manager i stället för inifrån Visual Studio. Därför är det inte lika enkelt att felsöka en tjänst som att felsöka andra Visual Studio-programtyper. Om du vill felsöka en tjänst måste du starta tjänsten och sedan koppla ett felsökningsprogram till den process där den körs. Du kan sedan felsöka ditt program med hjälp av alla standardfunktioner för felsökning i Visual Studio.

Varning

Du bör inte koppla till en process om du inte vet vad processen är och förstår konsekvenserna av att koppla till och eventuellt döda den processen. Om du till exempel ansluter till WinLogon-processen och sedan slutar felsöka stoppas systemet eftersom det inte kan fungera utan WinLogon.

Du kan endast koppla felsökningsprogrammet till en tjänst som körs. Den bifogade filen avbryter tjänstens nuvarande funktion. Den stoppar eller pausar inte tjänstens bearbetning. Det vill säga om tjänsten körs när du börjar felsöka är den fortfarande tekniskt sett i tillståndet Startad när du felsöker den, men bearbetningen har avbrutits.

När du har bifogat till processen kan du ange brytpunkter och använda dem för att felsöka koden. När du har avslutat dialogrutan som du använder för att ansluta till processen är du effektivt i felsökningsläge. Du kan använda Services Control Manager för att starta, stoppa, pausa och fortsätta din tjänst och på så sätt nå de brytpunkter som du har angett. Du kan senare ta bort den här dummytjänsten när felsökningen har slutförts.

Den här artikeln beskriver felsökning av en tjänst som körs på den lokala datorn, men du kan också felsöka Windows-tjänster som körs på en fjärrdator. Se Fjärrfelsökning.

Kommentar

Det kan vara svårt att felsöka OnStart metoden eftersom Services Control Manager har en gräns på 30 sekunder för alla försök att starta en tjänst. Mer information finns i Felsökning: Felsöka Windows Services.

Varning

För att få meningsfull information för felsökning måste Visual Studio-felsökaren hitta symbolfiler för de binärfiler som debuggas. Om du felsöker en tjänst som du har skapat i Visual Studio finns symbolfilerna (.pdb-filer) i samma mapp som den körbara filen eller biblioteket, och felsökningsprogrammet läser in dem automatiskt. Om du felsöker en tjänst som du inte har skapat bör du först hitta symboler för tjänsten och se till att de kan hittas av felsökningsprogrammet. Se Ange symbol (.pdb) och Källfiler i Visual Studio-felsökningsprogrammet. Om du felsöker en systemprocess eller vill ha symboler för systemanrop i dina tjänster bör du lägga till Microsoft-symbolservrarna. Se Felsökningssymboler.

Så här felsöker du en tjänst

  1. Skapa tjänsten i felsökningskonfigurationen.

  2. Installera tjänsten. Mer information finns i Så här: Installera och avinstallera tjänster.

  3. Starta din tjänst, antingen från Services Control Manager, Server Explorer eller från kod. Mer information finns i Så här: Starta tjänster.

  4. Starta Visual Studio med administrativa autentiseringsuppgifter så att du kan ansluta till systemprocesser.

  5. (Valfritt) På menyraden i Visual Studio väljer du Verktyg, Alternativ. I dialogrutan Alternativ väljer du Felsökning, Symboler, markerar kryssrutan Microsoft Symbolservrar och väljer sedan knappen OK.

  6. På menyraden väljer du Anslut till processmenyn Felsökning eller Verktyg . (Tangentbord: Ctrl+Alt+P)

    Dialogrutan Processer visas.

  7. Markera kryssrutan Visa processer från alla användare .

  8. I avsnittet Tillgängliga processer väljer du processen för din tjänst och väljer sedan Bifoga.

    Dricks

    Processen har samma namn som den körbara filen för din tjänst.

    Dialogrutan Bifoga till process visas.

  9. Välj lämpliga alternativ och välj sedan OK för att stänga dialogrutan.

    Kommentar

    Du är nu i felsökningsläge.

  10. Ange eventuella brytpunkter som du vill använda i koden.

  11. Få åtkomst till Services Control Manager och ändra din tjänst, skicka stopp-, paus- och fortsätt-kommandon för att träffa brytpunkterna. Mer information om hur du kör Services Control Manager finns i Så här: Starta tjänster. Mer information finns i Felsökning: Felsöka Windows-tjänster.

Felsökningstips för Windows Services

När du ansluter till tjänstens process kan du felsöka de flesta, men inte alla, koden för den tjänsten. Eftersom tjänsten till exempel redan har startats kan du inte felsöka koden i tjänstens OnStart metod eller koden i metoden Main som används för att läsa in tjänsten på det här sättet. Ett sätt att kringgå den här begränsningen är att skapa en tillfällig andra tjänst i tjänstprogrammet som bara finns för att underlätta felsökning. Du kan installera båda tjänsterna och sedan starta den här dummytjänsten för att läsa in tjänstprocessen. När den tillfälliga tjänsten har startat processen kan du använda felsökningsmenyn i Visual Studio för att ansluta till tjänstprocessen.

Prova att lägga till anrop till Sleep metoden för att fördröja åtgärden tills du kan ansluta till processen.

Prova att ändra programmet till ett vanligt konsolprogram. Det gör du genom att skriva om metoden på följande sätt så att den Main kan köras både som en Windows-tjänst och som ett konsolprogram, beroende på hur den startas.

Anvisningar: Kör en Windows-tjänst som ett konsolprogram

  1. Lägg till en metod i din tjänst som kör OnStart metoderna och OnStop :

    internal void TestStartupAndStop(string[] args)  
    {  
        this.OnStart(args);  
        Console.ReadLine();  
        this.OnStop();  
    }  
    
  2. Skriv om metoden på Main följande sätt:

    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. På fliken Program i projektets egenskaper anger du utdatatypen till Konsolprogram.

  4. Välj Starta felsökning (F5).

  5. Om du vill köra programmet som en Windows-tjänst igen installerar du det och startar det som vanligt för en Windows-tjänst. Det är inte nödvändigt att ångra dessa ändringar.

I vissa fall, till exempel när du vill felsöka ett problem som endast inträffar vid systemstart, måste du använda Windows-felsökningsprogrammet. Ladda ned Windows Driver Kit (WDK) och se Så här felsöker du Windows Services.

Se även