偵錯背景工作
重要 API
了解如何偵錯背景工作,包括 Windows 事件記錄檔中的背景工作啟用和偵錯追蹤。
偵錯跨程序與程序內背景工作
本主題主要討論在與主機應用程式不同的程序中執行的背景工作。 如果您正在偵錯程序內背景工作,則您不會有單獨的背景工作項目,並且可以在 OnBackgroundActivated() (執行程序內背景程式碼的位置) 上設定斷點,並參考手動觸發背景工作來偵錯背景工作代碼中的步驟 2,了解如何觸發背景程式碼執行的說明。
確保背景工作項目設定正確
本主題假設您已有一個具有要偵錯的背景工作的現有應用程式。 以下內容專屬程序外執行的背景工作,不適用於程序內背景工作。
- 在 C# 和 C++ 中,確保主專案引用背景工作項目。 如果此參考資料未到位,背景工作將不會包含在應用程式套件中。
- 在 C# 和 C++ 中,確保背景工作項目的輸出類型是「Windows 執行階段元件」。
- 背景類別必須在套件清單的入口點屬性中聲明。
手動觸發背景工作來偵錯背景工作代碼
背景工作可以透過 Microsoft Visual Studio 手動觸發。 然後,您可以逐步執行程式碼並進行偵錯。
在 C# 中,在背景類別的 Run 方法中放置斷點 (對於程序內背景工作,將斷點放置在 App.OnBackgroundActivated() 中),和/或使用 System.Diagnostics 寫入偵錯輸出。
在 C# 中,在背景類別的 Run 方法中放置斷點 (對於程序內背景工作,將斷點放置在 App.OnBackgroundActivated() 中),和/或使用 OutputDebugString 寫入偵錯輸出。
在偵錯工具中執行應用程式,然後使用生命週期事件工具列觸發背景工作。 此下拉清單顯示可由 Visual Studio 啟動的背景工作的名稱。
注意
預設情況下,Visual Studio 中不顯示生命週期事件工具列選項。 若要顯示這些選項,請以滑鼠右鍵按一下 Visual Studio 中的目前工具列,並確保啟用偵錯位置選項。
為此,背景工作必須已註冊並且仍在等待觸發。 例如,如果背景工作是使用一次性 TimeTrigger 註冊的,並且該觸發程序已觸發,則透過 Visual Studio 啟動工作將不會產生任何效果。
注意
使用下列觸發程序的背景工作無法以此方式啟動:應用程式觸發程序、MediaProcessing 觸發程序、ControlChannelTrigger、、PushNotificationTrigger 以及使用具有 SmsReceived 觸發程序類型的 SystemTrigger 的背景工作。
應用程式觸發程序和 MediaProcessingTrigger 可以在程式碼中透過trigger.RequestAsync()
手動發出訊號。當背景工作啟動時,偵錯工具將附加到它並在 VS 中顯示偵錯輸出。
偵錯背景工作啟用
注意
本節專門介紹程序外執行的背景工作,不適用於程序內背景工作。
背景工作啟動取決於三件事:
- 背景工作類別的名稱和命名空間
- 套件指令清單中指定的進入點屬性
- 註冊背景工作時,您的應用程式所指定的進入點
使用 Visual Studio 記下背景工作的進入點:
- 在 C# 和 C++ 中,記下背景工作專案中指定之背景工作類別的名稱和命名空間。
使用指令清單設計工具來檢查背景工作是否已在套件指令清單中正確宣告:
- 在 C# 和 C++ 中,進入點屬性必須符合背景工作命名空間,後面接著類別名稱。 例如:RuntimeComponent1.MyBackgroundTask。
- 也必須指定與工作搭配使用的所有觸發程序類型。
- 除非您使用 ControlChannelTrigger 或 PushNotificationTrigger,否則不得指定執行檔。
僅限 Windows。 若要查看 Windows 用於啟動背景工作的入口點,請啟用偵錯追蹤並使用 Windows 事件記錄。
如果您遵循此程序並且事件記錄顯示背景工作的錯誤入口點或觸發程序,則您的應用程式未正確註冊背景工作。 如需這項工作的說明,請參閱註冊背景工作。
- 前往開始畫面並蒐索 eventvwr.exe,開啟事件檢視器。
- 前往事件檢視器中的應用程式和服務記錄 ->Microsoft ->Windows - >BackgroundTaskInfrastructure。
- 在動作窗格中,選擇檢視 - >顯示分析和偵錯記錄以啟用診斷記錄記錄。
- 選擇診斷記錄並點擊啟用記錄。
- 現在,請嘗試使用您的應用程式來註冊並再次啟動背景工作。
- 檢視診斷記錄以取得詳細的錯誤資訊。 這包括為背景工作註冊的進入點。
背景工作和 Visual Studio 套件部署
如果使用 Visual Studio 部署使用背景工作的應用,然後更新清單設計器中指定的版本 (主要和/或次要),則隨後使用 Visual Studio 重新部署應用程式可能會導致應用程式的背景工作停止。 這可以透過以下方式補救:
- 使用 Windows PowerShell 透過執行與套件一起產生的指令碼來部署更新的應用程式 (而不是 Visual Studio)。
- 如果您已使用 Visual Studio 部署應用程式,且其背景工作現在已停止,請重新啟動或註銷/登入,以讓應用程式的背景工作再次運作。
- 您可以選擇「永遠重新安裝我的套件」偵錯選項,以避免在 C# 專案中出現這種情況。
- 等到應用程式準備好進行最終部署,以遞增套件版本 (偵錯時不要變更)。
備註
- 在再次註冊背景工作之前,請確定您的應用程式會檢查現有的背景工作註冊。 相同背景工作的多個註冊可能會因為每次觸發背景工作多次執行背景工作而造成非預期的結果。
- 如果背景工作需要鎖定畫面存取,請務必在嘗試偵錯背景工作之前,將應用程式放在鎖定畫面上。 關於為支援鎖定畫面的應用程式指定清單選項的信息,請參閱在應用程式清單中聲明背景工作。
- 註冊時會驗證背景工作註冊參數。 如果任何註冊參數無效,則會傳回錯誤。 請確定您的應用程式可正常處理背景工作註冊失敗的案例,如果您的應用程式在嘗試註冊工作之後依賴有效的註冊物件,它可能會當機。
如需使用 VS 偵錯背景工作的詳細資訊,請參閱 如何在 UWP 應用程式中觸發暫停、繼續和背景事件。
相關主題
- 建立及註冊跨處理序的背景工作
- 建立及註冊同處理序的背景工作
- 註冊背景工作
- 在應用程式資訊清單中宣告背景工作
- 背景工作的指導方針
- 如何在 UWP App 中觸發暫停、繼續和背景事件
- Visual Studio 中 .NET 的程式碼分析概觀