共用方式為


偵錯背景任務

重要的應用程式介面

瞭解如何偵錯背景工作,包括 Windows 事件記錄檔中的背景工作啟用和偵錯追蹤。

偵錯跨進程與進程內背景工作

本主題主要說明在與主應用程式不同的進程中執行的背景工作。 如果您要偵錯進程背景工作,則不會有個別的背景工作專案,而且可以在 OnBackgroundActivated() 上設定斷點(執行您的進程背景程序代碼的位置),並參閱在 手動觸發背景工作的步驟 2,以偵錯背景工作程式代碼,下方的指示如何觸發背景程式代碼執行。

請確定背景工作項目已正確設定

本主題假設您已經有一個應用程式,其中包含需要偵錯的背景工作。 以下內容針對不在行程內執行的背景工作,且不適用於在行程內的背景工作。

  • 在 C# 和 C++中,確定主要項目參考背景工作專案。 如果尚未備妥此參考,背景工作將不會包含在應用程式套件中。
  • 在 C# 和C++中,確定背景工作專案的 [輸出類型 ] 為 [Windows 運行時間元件]。
  • 背景類別必須在封裝指令清單的進入點屬性中宣告。

手動觸發背景工作以偵錯背景工作程序代碼

背景工作可以在 Microsoft Visual Studio 中手動觸發。 然後,您可以逐步執行程式碼並進行除錯。

  1. 在 C# 中,將斷點設置在背景類別的 Run 方法中(對於處理中的背景工作,將斷點設置在 App.OnBackgroundActivated() 中),並使用 System.Diagnostics撰寫偵錯輸出。

    在C++中,將斷點放在背景類別的 Run 函式中(針對處理中背景工作,將斷點放在 App.OnBackgroundActivated()中,並使用 OutputDebugString 撰寫偵錯輸出。

  2. 在調試程式中執行您的應用程式,然後使用 [生命週期事件 ] 工具列觸發背景工作。 此下拉式清單會顯示 Visual Studio 可以啟動的背景工作名稱。

    備註

    [生命週期事件] 工具列選項預設不會顯示在 Visual Studio 中。 若要顯示這些選項,請在 Visual Studio 中的目前工具列上以滑鼠右鍵點擊,並確保已啟用選項 [偵錯位置]

    若要讓此工作能夠運作,背景工作必須已經註冊,而且它仍必須等候觸發程式。 例如,如果背景工作使用單次 TimeTrigger 註冊,且該觸發器已經啟動,那麼透過 Visual Studio 啟動此工作將不會產生任何效果。

    備註

    使用下列觸發器的背景工作無法以這種方式啟動:Application 觸發器MediaProcessing 觸發器ControlChannelTriggerPushNotificationTrigger,以及使用 SystemTrigger 搭配 SmsReceived 觸發器類型的背景工作。
    應用程序觸發器媒體處理觸發器 可以在程式碼中手動發出 trigger.RequestAsync()

    偵錯背景任務

  3. 當背景工作啟動時,調試程式會附加至它,並在 VS 中顯示偵錯輸出。

偵錯背景工作啟用

備註

本節專屬於跨進程執行的背景工作,不適用於進程內背景工作。

背景工作啟用取決於三件事:

  • 背景工作類別的名稱和命名空間
  • 套件指令清單中指定的進入點屬性
  • 註冊背景工作時,您的應用程式所指定的進入點
  1. 使用 Visual Studio 記錄背景工作的進入點:

    • 在 C# 和 C++中,記下背景工作專案中指定之背景工作類別的名稱和命名空間。
  2. 使用指令清單設計工具來檢查背景工作是否已在套件指令清單中正確宣告:

    • 在 C# 和 C++ 中,進入點屬性必須符合背景工作命名空間,後面接著類別名稱。 例如:RuntimeComponent1.MyBackgroundTask。
    • 也必須指定用於這項工作的所有觸發類型。
    • 除非您使用 ControlChannelTriggerPushNotificationTrigger,否則不可指定可執行檔。
  3. 僅限 Windows。 若要查看 Windows 用來啟動背景工作的進入點,請啟用偵錯追蹤並使用 Windows 事件記錄檔。

    如果您遵循此程式,而事件記錄檔顯示背景工作的錯誤進入點或錯誤觸發條件,則表示您的應用程式未正確註冊背景工作。 如需這項任務的說明,請參閱 註冊背景任務

    1. 移至 [開始] 畫面並搜尋 eventvwr.exe來開啟事件查看器。
    2. 在事件查看器中,移至 Application and Services Logs ->Microsoft ->Windows ->BackgroundTaskInfrastructure
    3. 在動作窗格中,選取 檢視 ->顯示分析和偵錯記錄 啟用診斷記錄。
    4. 選取 診斷記錄,然後按一下 啟用記錄
    5. 現在,請嘗試使用您的應用程式來註冊並再次啟動背景工作。
    6. 檢視診斷記錄以取得詳細的錯誤資訊。 這包括為背景任務註冊的入口點。

背景任務偵錯資訊的事件查看器

背景工作和 Visual Studio 套件部署

如果使用 Visual Studio 部署一個利用背景執行緒的應用程式,然後更新 manifest 設計工具中指定的版本(主要和/或次要),後續使用 Visual Studio 重新部署應用程式可能會導致應用程式的背景執行緒無法正常運行。 這可以補救如下:

  • 使用 Windows PowerShell 藉由執行與套件一起產生的腳本來部署更新的應用程式(而不是 Visual Studio)。
  • 如果您已使用 Visual Studio 部署應用程式,且其背景工作現在已停止,請重新啟動或註銷/登入,以讓應用程式的背景工作再次運作。
  • 您可以選取 [永遠重新安裝我的套件] 偵錯選項,以避免在 C# 專案中發生此狀況。
  • 等到應用程式準備好進行最終部署,以遞增套件版本(偵錯時不要變更)。

備註

  • 在再次註冊背景工作之前,請確定您的應用程式會檢查現有的背景工作註冊。 多次註冊相同的背景工作可能會導致每次觸發時背景工作多次執行,進而造成非預期的結果。
  • 如果背景工作需要鎖定畫面存取,請務必在嘗試偵錯背景工作之前,將應用程式放在鎖定畫面上。 如需指定支援鎖定畫面之應用程式的指令清單選項的詳細資訊,請參閱 在應用程式指令清單中宣告背景工作
  • 背景工作註冊參數會在註冊時進行驗證。 如果任何註冊參數無效,則會傳回錯誤。 請確保您的應用程式能夠流暢地處理背景工作註冊失敗的情況。如果您的應用程序在嘗試註冊工作後仍依賴於有效的註冊物件,則可能會發生當機。

如需使用 VS 偵錯背景工作的詳細資訊,請參閱 如何在 UWP 應用程式中觸發暫停、繼續和背景事件