So wird's gemacht: Debuggen einer Hintergrundaufgabe (Windows-Runtime-Apps)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]

Hier erfahren Sie, wie Sie eine Hintergrundaufgabe einschließlich Hintergrundaufgabenaktivierung und Debugablaufverfolgung im Windows-Ereignisprotokoll debuggen.

Wissenswertes

Technologien

Voraussetzungen

  • In diesem Thema wird vorausgesetzt, dass Sie über eine App mit einer Hintergrundaufgabe verfügen, die Sie debuggen müssen.

Anweisungen

Sicherstellen, dass das Hintergrundaufgabenprojekt richtig eingerichtet wurde

  • Stellen Sie für C# und C++ sicher, dass das Hauptprojekt auf das Hintergrundaufgabenprojekt verweist. Sind diese Verweise nicht vorhanden, wird die Hintergrundaufgabe nicht mit dem Einstiegspunktattribut in das App-Paket eingebunden.
  • Stellen Sie für C# und C++ sicher, dass das Hintergrundaufgabenprojekt den Output type"WinMD-Datei" aufweist.
  • Für JavaScript muss sich der Hintergrundaufgabenworker in einer eigenen JavaScript-Datei befinden.
  • Die Hintergrundaufgabe muss im Paketmanifest deklariert werden. JavaScript-Aufgaben werden mit dem Startseitenattribut deklariert, während andere Aufgaben mit dem Einstiegspunktattribut deklariert werden.

Manuelles Auslösen von Hintergrundaufgaben, um Hintergrundaufgabencode zu debuggen

Hintergrundaufgaben können mit Microsoft Visual Studio Express 2012 für Windows 8 manuell ausgelöst werden. Anschließend können Sie den Code schrittweise durchlaufen und ihn debuggen.

  1. Setzen Sie in C# einen Haltepunkt in der Run-Methode bzw. schreiben Sie mit System.Diagnostics eine Debuggerausgabe.

    Setzen Sie in C++ einen Haltepunkt in der Run-Methode bzw. schreiben Sie mit OutputDebugString eine Debuggerausgabe.

    Setzen Sie in JavaScript einen Haltepunkt in der Run-Methode bzw. schreiben Sie mit debug object eine Debuggerausgabe.

  2. Lösen Sie die Hintergrundaufgabe über das Dropdownmenü zum Anhalten in der Symbolleiste Debugspeicherort aus. In diesem Dropdownmenü werden die Namen der Hintergrundaufgaben angezeigt, die von Visual Studio aktiviert werden können.

    Dies funktioniert nur dann, wenn die Hintergrundaufgabe bereits registriert ist und noch auf den Auslöser wartet. Wenn eine Hintergrundaufgabe z. B. mit einem einmaligen TimeTrigger registriert wurde und der Trigger bereits ausgelöst wurde, hat ein Start der Aufgabe mit Visual Studio keine Wirkung.

    Hinweis  Hintergrundaufgaben mit ControlChannelTrigger oder PushNotificationTrigger sowie Hintergrundaufgaben mit einem SystemTrigger mit dem Triggertyp SmsReceived können nicht auf diese Weise aktiviert werden.

     

    Debuggen von Hintergrundaufgaben

  3. Wenn die Hintergrundaufgabe aktiviert wird, wird sie vom Debugger übernommen, der die Debuggerausgabe dann in VS anzeigt.

Debuggen der Aktivierung der Hintergrundaufgabe

Die Aktivierung von Hintergrundaufgaben hängt davon ab, ob drei Dinge ordnungsgemäß festgelegt sind. Das folgende Verfahren zeigt, wie Sie prüfen und sicherstellen können, dass sämtliche dieser Angaben richtig sind.

  • Der Name und der Namespace der Hintergrundaufgabenklasse (für JavaScript der Pfad und der Dateiname der Aufgabe)
  • Das Einstiegspunktattribut, das im Paketmanifest angegeben ist (für JavaScript das Startseitenattribut)
  • Der Einstiegspunkt, der von der App bei der Registrierung der Hintergrundaufgabe angegeben wird
  1. Verwenden Sie Visual Studio, um den Einstiegspunkt der Hintergrundaufgabe zu notieren:

    • Notieren Sie für C# und C++, den Namen und den Namespace der Hintergrundaufgabenklasse, die im Hintergrundaufgabenprojekt angegeben ist.
    • Notieren Sie für JavaScript den Pfad und den Namen der Hintergrundaufgabendatei.
  2. Verwenden Sie den Manifest-Designer, um zu überprüfen, ob die Hintergrundaufgabe ordnungsgemäß im Paketmanifest deklariert wurde:

    • Für C# und C++ muss das Einstiegspunktattribut dem Namespace der Hintergrundaufgabe gefolgt vom Klassennamen entsprechen. Beispiel: Tasks.MyBackgroundTask.
    • Für JavaScript muss das Startseitenattribut dem Pfad zur JavaScript-Datei für den Hintergrundaufgabenworker entsprechen. Beispiel: js\MyBackgroundTask.js.
    • Alle Triggerarten, die mit der Aufgabe verwendet werden, müssen ebenfalls angegeben sein.
    • Die ausführbare Datei DARF NICHT angegeben werden, es sei denn Sie verwenden ControlChannelTrigger oder PushNotificationTrigger.
  3. Nur Windows Durch das enable debug tracing und das Windows-Ereignisprotokoll können Sie den Einstiegspunkt ermitteln, der von Windows zum Aktivieren der Hintergrundaufgabe verwendet wird.

    Wenn Sie sich an dieses Verfahren halten und das Ereignisprotokoll den falschen Einstiegspunkt oder Trigger für die Hintergrundaufgabe anzeigt, wird die Hintergrundaufgabe nicht ordnungsgemäß von der App registriert. Weitere Informationen zu dieser Aufgabe finden Sie unter So wird's gemacht: Registrieren einer Hintergrundaufgabe.

    1. Öffnen Sie die Ereignisanzeige, indem Sie zur Startseite wechseln und nach "eventvwr.exe" suchen.
    2. Gehen Sie in der Ereignisanzeige zu Anwendungs- und Dienstprotokolle -> Microsoft -> Windows -> BackgroundTaskInfrastructure.
    3. Wählen Sie im Aktionsbereich Ansicht -> Analytische und Debugprotokolle einblenden, um die Diagnoseprotokollierung zu aktivieren.
    4. Wählen Sie die Option Diagnoseprotokoll aus, und klicken Sie auf Protokoll aktivieren.
    5. Versuchen Sie nun, die App zu verwenden, um die Hintergrundaufgabe erneut zu registrieren und zu aktivieren.
    6. Zeigen Sie detaillierte Fehlerinformationen im Diagnoseprotokoll an. Dies schließt den Einstiegspunkt ein, der für die Hintergrundaufgabe registriert ist.

Ereignisanzeige für Debuginformationen für Hintergrundaufgaben

Hintergrundaufgaben und Bereitstellung des Visual Studio-Pakets

Wenn eine App mit Hintergrundaufgaben mit Visual Studio bereitgestellt wird und die im Manifest-Designer angegebene Haupt- oder Nebenversion aktualisiert wird, kann ein erneutes Bereitstellen der App mit Visual Studio dazu führen, dass die Hintergrundaufgabe der App hängt. Dieses Problem kann wie folgt behoben werden:

  • Stellen Sie die aktualisierte App mit Windows PowerShell (anstelle von Visual Studio) bereit, indem Sie das für das Paket erstellte Skript ausführen.
  • Wenn Sie die App bereits mit Visual Studio bereitgestellt haben und die Hintergrundaufgaben der App nun hängen, sollten Sie den Computer neu starten oder sich ab- und wieder anmelden, damit die Hintergrundaufgaben der App wieder funktionieren.
  • Sie können dies in C#-Projekten vermeiden, indem Sie die Debugoption "Paket immer neu installieren" auswählen.
  • Erhöhen Sie die Paketversion erst dann, wenn die App endgültig bereitgestellt werden kann (ändern Sie sie nicht während des Debuggens).

Anmerkungen

Zusätzliche Tipps für das Debuggen von Hintergrundaufgaben:

  • Hintergrundaufgaben unter JavaScript müssen am Schluss close() aufrufen. Wenn die Hintergrundaufgabe close() nicht aufruft, wird der Aufgabenprozess weiterhin ausgeführt. Dies kann den Akku unnötig belasten und zu unerwartetem Verhalten führen.
  • Stellen Sie sicher, dass Ihre App nach vorhandenen Registrierungen von Hintergrundaufgaben sucht, bevor sie die Hintergrundaufgabe erneut registriert. Eine mehrfache Registrierung derselben Hintergrundaufgabe kann zu unerwarteten Ergebnissen führen, da die Hintergrundaufgabe mehrfach ausgelöst und ausgeführt wird. Weitere Informationen zu dieser Aufgabe finden Sie unter So wird's gemacht: Abrufen einer Liste mit ausstehenden Hintergrundaufgaben.
  • Wenn für die Hintergrundaufgabe der Zugriff auf den Sperrbildschirm erforderlich ist, müssen Sie dafür sorgen, 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 So wird's gemacht: Anzeigen von Benachrichtigungen auf dem Sperrbildschirm und So wird's gemacht: Deklarieren von Hintergrundaufgaben im Anwendungsmanifest.
  • Ab Windows 8.1 werden Parameter für die Registrierung von Hintergrundaufgaben zum Zeitpunkt der Registrierung überprüft. Bei ungültigen Registrierungsparametern wird ein Fehler zurückgegeben. Stellen Sie sicher, dass Ihre App Szenarios, in denen die Registrierung von Hintergrundaufgaben fehlschlägt, problemlos verarbeitet. Sie können beispielsweise eine Bedingungsanweisung in Ihrer App verwenden, um die App auf Registrierungsfehler zu prüfen, und die fehlgeschlagene Registrierung mit anderen Parameterwerten erneut durchführen.

Weitere Informationen zum Debuggen einer Hintergrundaufgabe mit VS finden Sie unter So wird's gemacht: Auslösen von Anhalte-, Fortsetzungs- und Hintergrundereignissen in Windows Store-Apps.

Verwandte Themen

Schnellstart: Erstellen und Registrieren einer Hintergrundaufgabe

So wird's gemacht: Registrieren einer Hintergrundaufgabe

So wird's gemacht: Deklarieren von Hintergrundaufgaben im Anwendungsmanifest

Richtlinien und Prüflisten für Hintergrundaufgaben

Manifest-Designer

So wird's gemacht: Auslösen von Anhalte-, Fortsetzungs- und Hintergrundereignissen in Windows Store-Apps

Analysieren der Codequalität von Windows Store-Apps mit der Codeanalyse von Visual Studio