Debuggen einer Hintergrundaufgabe
Wichtige APIs
Hier erfahren Sie, wie Sie eine Hintergrundaufgabe einschließlich Hintergrundaufgabenaktivierung und Debugablaufverfolgung im Windows-Ereignisprotokoll debuggen.
Debuggen von Out-of-Process- und In-Process-Hintergrundaufgaben
In diesem Thema werden in erster Linie Hintergrundaufgaben behandelt, die in einem separaten Prozess als die Host-App ausgeführt werden. Wenn Sie eine In-Process-Hintergrundaufgabe debuggen, verfügen Sie nicht über ein separates Hintergrundaufgabenprojekt und können einen Haltepunkt für OnBackgroundActivated() festlegen (in dem der In-Process-Hintergrundcode ausgeführt wird) und Schritt 2 in "Hintergrundaufgaben manuell auslösen" anzeigen, um hintergrundaufgabencode zu debuggen, unten, anweisungen zum Auslösen des auszuführenden Hintergrundcodes.
Stellen Sie sicher, dass das Hintergrundaufgabenprojekt ordnungsgemäß eingerichtet ist.
In diesem Thema wird davon ausgegangen, dass Sie bereits über eine App mit einer Hintergrundaufgabe zum Debuggen verfügen. Im Folgenden finden Sie spezifisch für Hintergrundaufgaben, die außerhalb des Prozesses ausgeführt werden und nicht für In-Process-Hintergrundaufgaben gelten.
- Stellen Sie in C# und C++ sicher, dass das Hauptprojekt auf das Hintergrundaufgabenprojekt verweist. Wenn dieser Verweis nicht vorhanden ist, wird die Hintergrundaufgabe nicht in das App-Paket einbezogen.
- Stellen Sie in C# und C++ sicher, dass der Ausgabetyp des Hintergrundaufgabenprojekts "Windows-Runtime Komponente" lautet.
- Die Hintergrundklasse muss im Einstiegspunkt-Attribut im Paketmanifest deklariert werden.
Manuelles Auslösen von Hintergrundaufgaben zum Debuggen von Hintergrundaufgabencode
Hintergrundaufgaben können manuell über Microsoft Visual Studio ausgelöst werden. Anschließend können Sie den Code schrittweise durchlaufen und debuggen.
Setzen Sie in C# einen Haltepunkt in die Run-Methode der Hintergrundklasse (für In-Process-Hintergrundaufgaben setzen Sie den Haltepunkt in App.OnBackgroundActivated()), und/oder schreiben Sie die Debugausgabe mithilfe von System.Diagnostics.
Setzen Sie in C++ einen Haltepunkt in die Run-Funktion der Hintergrundklasse (für In-Process-Hintergrundaufgaben setzen Sie den Haltepunkt in App.OnBackgroundActivated()), und/oder schreiben Sie die Debugausgabe mithilfe von OutputDebugString.
Führen Sie Die Anwendung im Debugger aus, und lösen Sie dann die Hintergrundaufgabe mithilfe der Symbolleiste "Lifecycle-Ereignisse " aus. In dieser Dropdownliste werden die Namen der Hintergrundaufgaben angezeigt, die von Visual Studio aktiviert werden können.
Hinweis
Die Symbolleistenoptionen für Lebenszyklusereignisse werden in Visual Studio nicht standardmäßig angezeigt. Um diese Optionen anzuzeigen, klicken Sie mit der rechten Maustaste auf die aktuelle Symbolleiste in Visual Studio, und stellen Sie sicher, dass die Option "Debugspeicherort " aktiviert ist.
Damit dies funktioniert, muss die Hintergrundaufgabe bereits registriert sein, und sie muss weiterhin auf den Trigger warten. Wenn beispielsweise eine Hintergrundaufgabe mit einem einmaligen TimeTrigger registriert wurde und dieser Trigger bereits ausgelöst wurde, hat das Starten der Aufgabe über Visual Studio keine Auswirkung.
Hinweis
Hintergrundaufgaben, die die folgenden Trigger verwenden, können nicht auf diese Weise aktiviert werden: Anwendungstrigger, MediaProcessing-Trigger, ControlChannelTrigger, PushNotificationTrigger und Hintergrundaufgaben mit einem SystemTrigger mit dem SmsReceived-Triggertyp.
Anwendungstrigger und MediaProcessingTrigger können manuell im Code signalisiert werden.trigger.RequestAsync()
Wenn die Hintergrundaufgabe aktiviert wird, wird der Debugger an ihn angefügt und die Debugausgabe in VS angezeigt.
Debuggen der Aktivierung von Hintergrundaufgaben
Hinweis
Dieser Abschnitt ist spezifisch für Hintergrundaufgaben, die außerhalb des Prozesses ausgeführt werden, und gilt nicht für In-Process-Hintergrundaufgaben.
Die Aktivierung von Hintergrundaufgaben hängt von drei Dingen ab:
- Der Name und Namespace der Hintergrundaufgabenklasse
- Das im Paketmanifest angegebene Einstiegspunkt-Attribut
- Der Einstiegspunkt, der von Der App beim Registrieren der Hintergrundaufgabe angegeben wird
Verwenden Sie Visual Studio, um den Einstiegspunkt der Hintergrundaufgabe zu notieren:
- Notieren Sie sich in C# und C++ den Namen und den Namespace der im Hintergrundaufgabenprojekt angegebenen Hintergrundaufgabenklasse.
Verwenden Sie den Manifest-Designer, um zu überprüfen, ob die Hintergrundaufgabe im Paketmanifest ordnungsgemäß deklariert ist:
- In C# und C++ muss das Einstiegspunkt-Attribut dem Namespace der Hintergrundaufgabe gefolgt vom Klassennamen entsprechen. Beispiel: RuntimeComponent1.MyBackgroundTask.
- Alle triggertypen, die mit dem Vorgang verwendet werden, müssen ebenfalls angegeben werden.
- Die ausführbare Datei DARF NICHT angegeben werden, es sei denn, Sie verwenden controlChannelTrigger oder PushNotificationTrigger.
Nur Windows Um den Einstiegspunkt anzuzeigen, der von Windows zum Aktivieren der Hintergrundaufgabe verwendet wird, aktivieren Sie die Debugablaufverfolgung, und verwenden Sie das Windows-Ereignisprotokoll.
Wenn Sie diesem Verfahren folgen und im Ereignisprotokoll der falsche Einstiegspunkt oder Trigger für die Hintergrundaufgabe angezeigt wird, registriert Ihre App die Hintergrundaufgabe nicht ordnungsgemäß. Hilfe zu dieser Aufgabe finden Sie unter Registrieren einer Hintergrundaufgabe.
- Öffnen Sie die Ereignisanzeige, indem Sie zur Startseite wechseln und nach eventvwr.exe suchen.
- Wechseln Sie zur Anwendungs- und Dienstprotokolle ->Microsoft -Windows ->>BackgroundTaskInfrastructure in der Ereignisanzeige.
- Wählen Sie im Aktionsbereich "Ansicht -> Analyse- und Debugprotokolle anzeigen" aus, um die Diagnoseprotokollierung zu aktivieren.
- Wählen Sie das Diagnoseprotokoll aus, und klicken Sie auf "Protokoll aktivieren".
- Versuchen Sie nun, die App zum Registrieren und Aktivieren der Hintergrundaufgabe erneut zu verwenden.
- Zeigen Sie die Diagnoseprotokolle an, um detaillierte Fehlerinformationen anzuzeigen. Dies schließt den Einstiegspunkt ein, der für die Hintergrundaufgabe registriert ist.
Hintergrundaufgaben und Visual Studio-Paketbereitstellung
Wenn eine App, die Hintergrundaufgaben verwendet, mit Visual Studio bereitgestellt wird und die im Manifest-Designer angegebene Version (Haupt- und/oder Nebenversion) aktualisiert wird, kann die erneute Bereitstellung der App mit Visual Studio dazu führen, dass die Hintergrundaufgaben der App angehalten werden. Dies kann wie folgt behoben werden:
- Verwenden Sie Windows PowerShell, um die aktualisierte App (anstelle von Visual Studio) bereitzustellen, indem Sie das zusammen mit dem Paket generierte Skript ausführen.
- Wenn Sie die App bereits mit Visual Studio bereitgestellt haben und die Hintergrundaufgaben nun angehalten sind, starten Sie die App neu, oder melden Sie sich an, um die Hintergrundaufgaben der App erneut zu verwenden.
- Sie können die Debugoption "Mein Paket immer erneut installieren" auswählen, um dies in C#-Projekten zu vermeiden.
- Warten Sie, bis die App für die endgültige Bereitstellung bereit ist, um die Paketversion zu erhöhen (ändern Sie sie beim Debuggen nicht).
Hinweise
- Stellen Sie sicher, dass Ihre App nach vorhandenen Registrierungen von Hintergrundaufgaben sucht, bevor Sie die Hintergrundaufgabe erneut registrieren. Mehrere Registrierungen derselben Hintergrundaufgabe können zu unerwarteten Ergebnissen führen, indem die Hintergrundaufgabe mehrmals ausgeführt wird, wenn sie ausgelöst wird.
- Wenn für die Hintergrundaufgabe der Sperrbildschirmzugriff erforderlich ist, stellen Sie sicher, dass die App auf dem Sperrbildschirm platziert wird, bevor Sie versuchen, die Hintergrundaufgabe zu debuggen. Informationen zum Angeben von Manifestoptionen für Sperrbildschirmfähige Apps finden Sie unter Deklarieren von Hintergrundaufgaben im Anwendungsmanifest.
- Parameter für die Registrierung von Hintergrundaufgaben werden zum Zeitpunkt der Registrierung überprüft. Wenn einer der Registrierungsparameter ungültig ist, wird ein Fehler zurückgegeben. Stellen Sie sicher, dass Ihre App Szenarien, in denen die Registrierung von Hintergrundaufgaben fehlschlägt, ordnungsgemäß behandelt. Wenn ihre App stattdessen von einem gültigen Registrierungsobjekt abhängt, nachdem Sie versucht haben, eine Aufgabe zu registrieren, kann es abstürzen.
Weitere Informationen zur Verwendung von VS zum Debuggen einer Hintergrundaufgabe finden Sie unter Auslösen von Anhalte-, Fortsetzungs- und Hintergrundereignissen in UWP-Apps.
Zugehörige Themen
- Erstellen und Registrieren einer Hintergrundaufgabe außerhalb von Prozessen
- Erstellen und Registrieren einer Hintergrundaufgabe innerhalb von Prozessen
- Registrieren einer Hintergrundaufgabe
- Deklarieren von Hintergrundaufgaben im Anwendungsmanifest
- Richtlinien für Hintergrundaufgaben
- So können Sie Ereignisse in Windows UWP-Apps auslösen, anhalten, fortsetzen und im Hintergrund ausführen
- Übersicht über die Codeanalyse für .NET in Visual Studio