Udostępnij przez


Debugowanie zadania w tle

ważne interfejsy API

  • Windows.ApplicationModel.Background

Dowiedz się, jak debugować zadanie w tle, w tym aktywację zadania w tle i śledzenie debugowania w dzienniku zdarzeń systemu Windows.

Debugowanie zadań w tle poza procesem a zadań w tle w procesie

Ten temat dotyczy głównie zadań w tle uruchamianych w osobnym procesie niż aplikacja hosta. Jeśli debugujesz zadanie w tle, które działa w obrębie procesu, nie będziesz mieć oddzielnego projektu zadania w tle. Możesz ustawić punkt przerwania w metodzie OnBackgroundActivated() (tam, gdzie działa Twój kod w tle) i zobaczyć krok 2 w Wyzwalanie zadań w tle ręcznie, aby debugować kod zadania w tleponiżej, aby uzyskać instrukcje dotyczące wyzwalania kodu w tle do wykonania.

Upewnij się, że projekt zadania w tle jest poprawnie skonfigurowany

W tym temacie założono, że masz już istniejącą aplikację z zadaniem w tle do debugowania. Poniżej opisano zadania w tle, które są uruchamiane poza procesem i nie mają zastosowania do zadań w tle w procesie.

  • W językach C# i C++upewnij się, że główny projekt odwołuje się do projektu zadania w tle. Jeśli nie ma tego odwołania, zadanie w tle nie zostanie uwzględnione w zestawie aplikacji.
  • W językach C# i C++upewnij się, że typ danych wyjściowych projektu zadania w tle to "Składnik środowiska uruchomieniowego systemu Windows".
  • Klasa tła musi być zadeklarowana w atrybucie punktu wejścia w manifeście pakietu.

Ręczne wyzwalanie zadań w tle w celu debugowania kodu zadania w tle

Zadania w tle można wyzwalać ręcznie za pomocą programu Microsoft Visual Studio. Następnie możesz przejść przez kod i debugować go.

  1. W C# umieść punkt przerwania w metodzie Run klasy obsługującej zadania w tle (w przypadku zadań w tle w procesie umieść punkt przerwania w App.OnBackgroundActivated()) i/lub zapisz dane wyjściowe do debugowania za pomocą System.Diagnostics.

    W języku C++umieść punkt przerwania w funkcji Run klasy w tle (w przypadku zadań w tle w procesie umieść punkt przerwania w pliku App.OnBackgroundActivated()) i/lub zapisz dane wyjściowe debugowania przy użyciu OutputDebugString.

  2. Uruchom aplikację w debugerze, a następnie wyzwól zadanie w tle przy użyciu paska narzędzi zdarzeń cyklu życia . Ta lista rozwijana zawiera nazwy zadań w tle, które mogą być aktywowane przez program Visual Studio.

    Uwaga / Notatka

    Opcje paska narzędzi Zdarzenia cyklu życia nie są domyślnie wyświetlane w programie Visual Studio. Aby wyświetlić te opcje, kliknij prawym przyciskiem myszy bieżący pasek narzędzi w programie Visual Studio i upewnij się, że opcja Lokalizacja debugowania jest włączona.

    Aby to działało, zadanie w tle musi być już zarejestrowane i musi nadal czekać na wyzwalacz. Jeśli na przykład zadanie w tle zostało zarejestrowane przy użyciu jednorazowego wyzwalacza TimeTrigger i wyzwalacz został już wyzwolony, uruchomienie zadania za pomocą programu Visual Studio nie będzie miało żadnego wpływu.

    Uwaga / Notatka

    Zadania w tle korzystające z następujących wyzwalaczy nie mogą być aktywowane w ten sposób: Wyzwalacz aplikacji, Wyzwalacz MediaProcessing , Wyzwalacz ControlChannel , Wyzwalacz PushNotification oraz zadania w tle wykorzystujące Wyzwalacz systemowy z typem wyzwalacza SmsReceived .
    Można ręcznie zasygnalizować w kodzie wyzwalacze Application trigger i MediaProcessingTrigger za pomocą trigger.RequestAsync().

    debugowanie zadań w tle

  3. Po aktywacji zadania w tle, debuger zostanie do niego dołączony i wyświetli wynik debugowania w programie Visual Studio.

Debugowanie aktywacji zadania w tle

Uwaga / Notatka

Ta sekcja jest specyficzna dla zadań w tle, które działają poza procesem i nie ma zastosowania do zadań w tle wewnątrz procesu.

Aktywacja zadania w tle zależy od trzech elementów:

  • Nazwa i przestrzeń nazw klasy zadań w tle
  • Atrybut punktu wejścia określony w manifeście pakietu
  • Punkt wejścia określony przez aplikację podczas rejestrowania zadania w tle
  1. Zanotuj punkt wejścia zadania w tle za pomocą programu Visual Studio:

    • W językach C# i C++zanotuj nazwę i przestrzeń nazw klasy zadań w tle określoną w projekcie zadania w tle.
  2. Użyj projektanta manifestu, aby sprawdzić, czy zadanie w tle jest poprawnie zadeklarowane w manifeście pakietu:

    • W językach C# i C++atrybut punktu wejścia musi być zgodny z przestrzenią nazw zadań w tle, a następnie nazwą klasy. Na przykład: RuntimeComponent1.MyBackgroundTask.
    • Należy również określić wszystkie typy wyzwalaczy używane z zadaniem.
    • Plik wykonywalny NIE MOŻE być określony, chyba że używasz ControlChannelTrigger lub PushNotificationTrigger.
  3. Tylko system Windows. Aby wyświetlić punkt wejścia używany przez system Windows do aktywowania zadania w tle, włącz śledzenie debugowania i użyj dziennika zdarzeń systemu Windows.

    Jeśli wykonasz tę procedurę, a w dzienniku zdarzeń zostanie wyświetlony nieprawidłowy punkt wejścia lub wyzwalacz zadania w tle, aplikacja nie rejestruje poprawnie zadania w tle. Aby uzyskać pomoc dotyczącą tego zadania, zobacz Rejestrowanie zadania w tle.

    1. Otwórz podgląd zdarzeń, przechodząc do ekranu startowego i wyszukując eventvwr.exe.
    2. Przejdź do dzienników aplikacji i usług —>Microsoft —>Windows —>BackgroundTaskInfrastructure w podglądzie zdarzeń.
    3. W okienku akcji wybierz pozycję Widok —>Pokaż dzienniki analityczne i debugowania, aby włączyć rejestrowanie diagnostyczne.
    4. Wybierz dziennika diagnostycznego i kliknij Włącz dziennik.
    5. Teraz spróbuj ponownie zarejestrować i aktywować zadanie w tle przy użyciu aplikacji.
    6. Wyświetl dzienniki diagnostyczne, aby uzyskać szczegółowe informacje o błędzie. Obejmuje to punkt wejścia zarejestrowany dla zadania w tle.

podgląd zdarzeń na potrzeby informacji debugowania zadań w tle

Zadania w tle i wdrażanie pakietów programu Visual Studio

Jeśli aplikacja korzystająca z zadań w tle jest wdrażana przy użyciu programu Visual Studio, a wersja (wersja główna i/lub pomocnicza) określona w projektancie manifestu zostanie zaktualizowana, a następnie ponowne wdrożenie aplikacji za pomocą programu Visual Studio może spowodować zatrzymanie zadań w tle aplikacji. Można to naprawić w następujący sposób:

  • Użyj programu Windows PowerShell, aby wdrożyć zaktualizowaną aplikację (zamiast programu Visual Studio), uruchamiając skrypt wygenerowany obok pakietu.
  • Jeśli aplikacja została już wdrożona przy użyciu programu Visual Studio i jej zadania w tle są teraz wstrzymane, uruchom ponownie komputer lub wyloguj się, a następnie zaloguj ponownie, aby zadania w tle aplikacji zaczęły ponownie działać.
  • Możesz wybrać opcję debugowania "Zawsze instaluj ponownie mój pakiet", aby uniknąć tego w projektach języka C#.
  • Poczekaj, aż aplikacja będzie gotowa do końcowego wdrożenia, aby zwiększać wersję pakietu (nie zmieniaj jej podczas debugowania).

Uwagi

  • Przed ponownym zarejestrowaniem zadania w tle upewnij się, że aplikacja sprawdza istniejące rejestracje zadań w tle. Rejestrowanie tego samego zadania w tle wielokrotnie może prowadzić do nieoczekiwanych wyników, uruchamiając zadanie więcej niż raz przy każdym jego wyzwoleniu.
  • Jeśli zadanie w tle wymaga dostępu do ekranu blokady, przed próbą debugowania zadania w tle upewnij się, że aplikacja zostanie umieszczona na ekranie blokady. Aby uzyskać informacje na temat określania opcji manifestu dla aplikacji z obsługą ekranu blokady, zobacz Deklarowanie zadań w tle w manifeście aplikacji.
  • Parametry rejestracji zadań w tle są weryfikowane w momencie rejestracji. Zwracany jest błąd, jeśli którykolwiek z parametrów rejestracji jest nieprawidłowy. Upewnij się, że aplikacja bezpiecznie obsługuje scenariusze, w których rejestracja zadań w tle kończy się niepowodzeniem — jeśli zamiast tego aplikacja zależy od prawidłowego obiektu rejestracji po próbie zarejestrowania zadania, może to spowodować awarię.

Aby uzyskać więcej informacji na temat debugowania zadania w tle za pomocą programu Visual Studio, zobacz Jak inicjować zdarzenia zawieszenia, wznowienia i działania w tle w aplikacjach platformy UWP.