如何偵錯背景工作 (Windows 執行階段應用程式)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
了解如何偵錯背景工作,包括 Windows 事件記錄檔中的背景工作啟用和偵錯追蹤。
您必須知道的事
技術
先決條件
- 這個主題假設您已有需要偵錯背景工作的應用程式。
指示
請確定已正確設定背景工作專案
- 在 C# 與 C++ 中,確定主要專案參照背景工作專案。如果此參照未就緒,背景工作將不會包含在應用程式套件中。使用進入點屬性。
- 在 C# 與 C++ 中,確定背景工作專案的 Output type 為 WinMD 檔案""。
- 在 JavaScript 中,背景工作工作者必須位於自身的 JavaScript 檔案中。
- 必須在套件資訊清單中宣告背景工作。JavaScript 工作使用起始頁屬性宣告,而其他工作則使用進入點屬性宣告。
手動觸發背景工作以偵錯背景工作程式碼
您可以透過 Microsoft Visual Studio Express 2012 for Windows 8 手動觸發背景工作。然後就可以逐步檢查程式碼並進行偵錯。
在 C# 的 Run 方法中設置中斷點,和/或使用 System.Diagnostics 編寫偵錯輸出。
在 C++ 的 Run 函式中設置中斷點,和/或使用 OutputDebugString 編寫偵錯輸出。
在 JavaScript 的背景工作 JavaScript 檔案中設置中斷點,和/或使用 debug object 編寫偵錯輸出。
使用 [偵錯位置] 工具列提供的暫停下拉式功能表,觸發背景工作。這個下拉式清單會顯示可由 Visual Studio 啟用的背景工作名稱。
若要能夠運作,背景工作必須已經登錄且必須仍在等候觸發程序。例如,如果背景工作是以一次性的 TimeTrigger 登錄,且該觸發程序已經引發,則透過 Visual Studio 啟動工作將不會有作用。
注意 使用 ControlChannelTrigger 或 PushNotificationTrigger 的背景工作以及使用 SystemTrigger 搭配 SmsReceived 觸發程序類型的背景工作,都無法以這個方式啟用。
當背景工作啟用時,偵錯工具會連結到工作,並在 VS 顯示偵錯輸出。
偵錯背景工作啟用
背景工作啟用必須仰賴下列三件正確符合要求的項目:此程序說明如何檢查並確定這些項目皆符合要求。
- 背景工作類別的名稱與命名空間 (若為 Javascript,則是工作的路徑與檔案名稱)
- 在套件資訊清單中指定的進入點屬性 (若為 Javascript,則是起始頁屬性)
- 您的應用程式在登錄背景工作時指定的進入點
使用 Visual Studio 記下背景工作的進入點:
- 在 C# 與 C++ 中,記下背景工作專案中所指定的背景工作類別的名稱與命名空間。
- 在 JavaScript,記下背景工作檔案的路徑與檔案名稱。
使用資訊清單設計工具來檢查已在套件資訊清單中正確宣告背景工作:
- 在 C# 與 C++ 中,進入點屬性必須符合類別名稱後的背景工作命名空間。例如,Tasks.MyBackgroundTask。
- 在 JavaScript 中,起始頁屬性必須為背景工作工作者的 JavaScript 檔案的路徑。例如:js\MyBackgroundTask.js。
- 也必須指定與工作搭配使用的所有觸發程序類型。
- 除非您使用 ControlChannelTrigger 或 PushNotificationTrigger,否則「切勿」指定可執行檔。
僅 Windows。查看 Windows 使用的進入點來啟動背景工作、enable debug tracing並使用 Windows 事件日誌。
如果您遵照此程序但事件日誌顯示背景工作發生錯誤進入點或觸發程序,表示您的應用程式未正確登錄背景工作。如需此工作的協助,請參閱如何登錄背景工作。
- 移至 [開始] 畫面並搜尋 eventvwr.exe,開啟事件檢視器。
- 在事件檢視器中,移至 [應用程式及服務記錄檔] -> [Microsoft]**** -> [Windows] -> [BackgroundTaskInfrastructure]****。
- 在動作窗格中,選取 [檢視] -> [顯示分析與偵錯記錄檔]****,啟用診斷記錄。
- 選取 [診斷記錄檔],然後按一下 [啟用記錄]****。
- 現在嘗試使用應用程式再次登錄並啟動背景工作。
- 檢視診斷記錄檔,以取得詳細的錯誤資訊。當中包含為背景工作登錄的進入點。
背景工作和 Visual Studio 套件部署
如果使用背景工作的應用程式是利用 Visual Studio 所部署,且隨後更新了在資訊清單設計工具中指定的版本 (主要和/或次要),則後續透過 Visual Studio 重新部署應用程式時,可能會使應用程式的背景工作停止。這可以透過下列方式來修正:
- 執行與套件一起產生的指令碼,使用 Windows PowerShell (而非 Visual Studio) 來部署已更新的應用程式。
- 如果您已經使用 Visual Studio 部署應用程式,而應用程式的背景工作現在停止了,請重新啟動或登出/登入,讓應用程式的背景工作再次運作。
- 您可以選取 [永遠重新安裝我的封裝] 偵錯選項,避免在 C# 專案中發生這個狀況。
- 等待應用程式準備就緒再進行最終部署,以遞增套件版本 (不要在偵錯期間變更)。
備註
偵錯背景工作的其他提示:
- JavaScript 背景工作必須在完成時呼叫 close()。如果背景工作未呼叫 close(),工作處理程序會持續執行。這可能會耗費電池使用時間,並造成非預期的行為。
- 確認您的應用程式會先檢查現有背景工作登錄,以免再次登錄背景工作。多次登錄相同背景工作會在每次觸發背景工作時多次執行該背景工作,因而造成無法預期的結果。如需此工作的協助,請參閱如何取得擱置中的背景工作清單。
- 如果背景工作需要鎖定畫面存取,請確定先將 app 置於鎖定畫面後,再嘗試偵錯背景工作。如需為具有鎖定畫面功能的 app 指定資訊清單選項的詳細資訊,請參閱如何在鎖定畫面顯示通知和如何在應用程式資訊清單中宣告背景工作。
- 從 Windows 8.1 開始,背景工作登錄參數都是在登錄時驗證。如果有任一個登錄參數無效,就會傳回錯誤。確認您的應用程式能夠妥善處理背景工作登錄失敗的狀況;反之,如果應用程式依賴有效的驗證物件,嘗試登錄工作之後,可能會當機。例如,您的應用程式可以使用條件式陳述式來檢查登錄是否有錯誤,接著利用不同的參數值來重試已失敗的登錄。
如需使用 VS 偵錯背景工作的詳細資訊,請參閱如何在 Windows 市集應用程式觸發暫停、繼續以及背景事件。