Delen via


Fouten opsporen in een achtergrondtaak

Belangrijke API's

Meer informatie over het opsporen van fouten in een achtergrondtaak, inclusief activering van achtergrondtaken en tracering van foutopsporing in het Windows-gebeurtenislogboek.

Foutopsporing van achtergrondtaken buiten het proces (out-of-process) versus binnen het proces (in-process)

In dit onderwerp worden voornamelijk achtergrondtaken besproken die in een afzonderlijk proces worden uitgevoerd dan de host-app. Als u fouten opspoort voor een achtergrondtaak binnen een proces, hebt u geen afzonderlijk achtergrondtaakproject, en kunt u een onderbrekingspunt instellen op OnBackgroundActivated() (waar uw in-process achtergrondcode wordt uitgevoerd), en zie stap 2 in Achtergrondtaken handmatig activeren om fouten op te sporen in achtergrondtaak-codehieronder voor instructies over het activeren van uw achtergrondcode om uit te voeren.

Zorg ervoor dat het achtergrondtaakproject juist is ingesteld

In dit onderwerp wordt ervan uitgegaan dat u al een bestaande app met een achtergrondtaak hebt om fouten op te sporen. Het volgende is specifiek voor achtergrondtaken die buiten het proces worden uitgevoerd en is niet van toepassing op in-process achtergrondtaken.

  • Controleer in C# en C++of het hoofdproject verwijst naar het achtergrondtaakproject. Als deze verwijzing niet aanwezig is, wordt de achtergrondtaak niet opgenomen in het app-pakket.
  • Zorg ervoor dat in C# en C++ het uitvoertype van het achtergrondtaakproject 'Windows Runtime-onderdeel' is.
  • De achtergrondklasse moet worden gedeclareerd in het toegangspuntkenmerk in het pakketmanifest.

Achtergrondtaken handmatig activeren om fouten in achtergrondtaakcode op te sporen

Achtergrondtaken kunnen handmatig worden geactiveerd via Microsoft Visual Studio. Vervolgens kunt u de code doorlopen en fouten opsporen.

  1. Plaats in C# een onderbrekingspunt in de Run-methode van de achtergrondklasse (voor in-process achtergrondtaken plaatst u het onderbrekingspunt in App.OnBackgroundActivated()) en/of schrijf debugginguitvoer met behulp van System.Diagnostics.

    Plaats in C++een onderbrekingspunt in de functie Uitvoeren van de achtergrondklasse (voor in-process achtergrondtaken plaatst u het onderbrekingspunt in App.OnBackgroundActivated()) en/of schrijfdebugginguitvoer met behulp van OutputDebugString.

  2. Voer uw toepassing uit in de debugger en activeer vervolgens de achtergrondtaak met behulp van de levenscyclusgebeurtenissen werkbalk. In deze vervolgkeuzelijst ziet u de namen van de achtergrondtaken die kunnen worden geactiveerd door Visual Studio.

    Opmerking

    De werkbalkopties voor levenscyclusevenementen worden niet standaard weergegeven in Visual Studio. Als u deze opties wilt weergeven, klikt u met de rechtermuisknop op de huidige werkbalk in Visual Studio en zorgt u ervoor dat de optie Foutopsporingslocatie is ingeschakeld.

    Dit werkt alleen als de achtergrondtaak al is geregistreerd en het nog steeds wacht op de trigger. Als bijvoorbeeld een achtergrondtaak is geregistreerd met een eenmalige TijdTrigger en die trigger al is geactiveerd, zal het starten van de taak via Visual Studio geen effect hebben.

    Opmerking

    Achtergrondtaken met behulp van de volgende triggers kunnen niet op deze manier worden geactiveerd: Toepassingstrigger, MediaProcessing-trigger, ControlChannelTrigger, PushNotificationTriggeren achtergrondtaken met een SystemTrigger met de trigger van het type SmsReceived.
    toepassingstrigger en MediaProcessingTrigger kunnen handmatig worden gesignaleerd in code met trigger.RequestAsync().

    achtergrondtaken debuggen

  3. Wanneer de achtergrondtaak wordt geactiveerd, koppelt de debugger zich eraan en wordt de foutopsporingsuitvoer weergegeven in Visual Studio.

Fouten opsporen in activering van achtergrondtaken

Opmerking

Deze sectie is specifiek voor achtergrondtaken die niet meer worden verwerkt en die niet van toepassing zijn op achtergrondtaken in het proces.

Activering van achtergrondtaken is afhankelijk van drie dingen:

  • De naam en naamruimte van de achtergrondtaakklasse
  • Het toegangspuntkenmerk dat is opgegeven in het pakketmanifest
  • Het toegangspunt dat door uw app is opgegeven bij het registreren van de achtergrondtaak
  1. Gebruik Visual Studio om het toegangspunt van de achtergrondtaak te noteren:

    • Noteer in C# en C++ de naam en naamruimte van de achtergrondtaakklasse die is opgegeven in het achtergrondtaakproject.
  2. Gebruik de manifestontwerper om te controleren of de achtergrondtaak correct is gedeclareerd in het pakketmanifest:

    • In C# en C++ moet het toegangspuntkenmerk overeenkomen met de naamruimte van de achtergrondtaak, gevolgd door de klassenaam. Bijvoorbeeld: RuntimeComponent1.MyBackgroundTask.
    • Alle triggertypen die met de taak worden gebruikt, moeten ook worden opgegeven.
    • Het uitvoerbare bestand MAG NIET worden opgegeven, tenzij u ControlChannelTrigger of PushNotificationTrigger gebruikt.
  3. Alleen voor Windows. Als u het toegangspunt wilt zien dat door Windows wordt gebruikt om de achtergrondtaak te activeren, schakelt u tracering voor foutopsporing in en gebruikt u het Windows-gebeurtenislogboek.

    Als u deze procedure volgt en in het gebeurtenislogboek het verkeerde toegangspunt of de trigger voor de achtergrondtaak wordt weergegeven, registreert uw app de achtergrondtaak niet correct. Zie Een achtergrondtaak registreren voor hulp bij deze taak.

    1. Open de Gebeurtenisviewer door naar het startscherm te gaan en naar eventvwr.exete zoeken.
    2. Ga naar Toepassings- en serviceslogboeken ->Microsoft ->Windows ->BackgroundTaskInfrastructure in de gebeurtenissenviewer.
    3. Selecteer in het deelvenster Acties Weergave ->Analytische logboeken en logboeken voor foutopsporing weergeven om de diagnostische logboekregistratie in te schakelen.
    4. Selecteer het diagnostisch logboek en klik op Log inschakelen.
    5. Probeer nu uw app te gebruiken om de achtergrondtaak opnieuw te registreren en te activeren.
    6. Bekijk de diagnostische logboeken voor gedetailleerde foutinformatie. Dit omvat het toegangspunt dat is geregistreerd voor de achtergrondtaak.

evenementenweergave voor foutopsporingsinformatie van achtergrondtaken

Achtergrondtaken en implementatie van Visual Studio-pakketten

Als een app die gebruikmaakt van achtergrondtaken wordt geïmplementeerd met Visual Studio en de versie (primaire en/of secundaire versie) die is opgegeven in Manifest Designer, wordt vervolgens bijgewerkt, kan het opnieuw implementeren van de app met Visual Studio ertoe leiden dat de achtergrondtaken van de app vastlopen. Dit kan als volgt worden opgelost:

  • Gebruik Windows PowerShell om de bijgewerkte app (in plaats van Visual Studio) te implementeren door het script uit te voeren dat naast het pakket wordt gegenereerd.
  • Als u de app al hebt geïmplementeerd met Visual Studio en de achtergrondtaken nu zijn vastgelopen, start dan opnieuw op of meld u af en weer aan om de achtergrondtaken van de app weer op gang te brengen.
  • U kunt de foutopsporingsoptie 'Mijn pakket altijd opnieuw installeren' selecteren om dit in C#-projecten te voorkomen.
  • Wacht totdat de app gereed is voor de definitieve implementatie om de pakketversie te verhogen (wijzig deze niet tijdens foutopsporing).

Opmerkingen

  • Zorg ervoor dat uw app controleert op bestaande registraties van achtergrondtaken voordat u de achtergrondtaak opnieuw registreert. Meerdere registraties van dezelfde achtergrondtaak kunnen onverwachte resultaten veroorzaken door de achtergrondtaak meerdere keren uit te voeren wanneer deze wordt geactiveerd.
  • Als voor de achtergrondtaak toegang tot het vergrendelingsscherm is vereist, moet u ervoor zorgen dat de app op het vergrendelingsscherm wordt geplaatst voordat u fouten probeert op te sporen in de achtergrondtaak. Zie Achtergrondtaken declareren in het toepassingsmanifest voor informatie over het opgeven van manifestopties voor apps die geschikt zijn voor vergrendelingsschermen.
  • Parameters voor registratie van achtergrondtaken worden gevalideerd op het moment van registratie. Er wordt een fout geretourneerd als een van de registratieparameters ongeldig is. Zorg ervoor dat uw app probleemloos scenario's verwerkt waarbij de registratie van achtergrondtaken mislukt. Als uw app in plaats daarvan afhankelijk is van een geldig registratieobject nadat u een taak hebt geregistreerd, kan deze vastlopen.

Zie voor meer informatie over het gebruik van Visual Studio voor het debuggen van een achtergrondtaak, Hoe onderbrekings-, hervattings- en achtergrondevenementen in UWP-apps te activeren.