本文章是由機器翻譯。

Windows 8

偵錯 Windows 市集應用程式入門

Bruno Terkaly
羅伯特 · 埃文斯

上世紀 40 年代,當海軍上將恩典料斗程式中的一個未能正常工作,她發現一隻飛蛾被困在哈佛MarkII 繼電器之間 — —"bug"一詞誕生。今天,當然,調試無關與昆蟲。它是所有關于查找和刪除軟體中的缺陷的過程。

儘管事實上,今天的程式設計語言和工具去説明開發人員編寫代碼可靠,沒有從邏輯錯誤保護很長的路。現代編譯器只能執行初步檢查對程式設計語言的語法和類型系統的正確使用。編譯器沒有以説明您確定您的應用程式的實際運行時行為。在哪裡調試技能至關重要。這篇文章將側重于調試 Windows 應用商店的應用程式和探索一些在外地使用的技術。

我們會使用Visual Studio2013年預覽,儘管這些技術將一般工作與早期版本的產品。在開始之前,然而,您需要準備您的環境為更高級的調試比Visual Studio單獨提供。我們建議下載並安裝以下資源:

流程生命週期管理

與典型桌面應用程式,應用程式和它運行直到他終止它的使用者發射。在應用程式繼續運行即使它不是在最前列。Windows 應用商店的應用程式略有不同。當一個應用程式不是在最前線,Windows 服務 — — 運行時經紀人 — — 在應用程式中,掛起所有的執行緒和醒他們回到了 app 時才在最前列。這種新型的功能有助於保持整體的系統性能和電池壽命。與 Windows 8.1,甚至當使用者,關閉一個應用程式的預設操作是將應用程式放入掛起狀態,並不會終止它。如果您更喜歡舊的 Windows 8 功能,您可以設置 Windows.ApplicationModel.ClosePolicy.TerminateOnClose 等於 true。

掛起和恢復事件被發送到應用程式,讓你有機會來存儲和檢索狀態或根據需要採取其他行動。此外,如果一個應用程式適用于記憶體壓力太大或太長,啟動,運行時經紀人將終止 app,殺死所有的執行緒。Visual Studio自動禁用進程生命週期管理 (PLM) 正在調試,無論你是要調試您自己的應用程式還是附加到一個已安裝的應用程式的應用程式 (使用 Debug |調試已安裝的應用程式套裝軟體)。它是重要的 PLM 被禁用,因為它會阻止你能夠正確地調試應用程式。原因很簡單 — — 運行時經紀人可能介入並終止應用程式,你有機會來正確調試它之前。

然而,一些Visual Studio,Windows 調試器 (WinDbg) 和 Microsoft 主控台調試器 (CDB) 等外部調試器的要求您要手動禁用 PLM 的功能。若要手動禁用 PLM,你可以使用 PLMDebug 工具 Windows 8.1 SDK 中獲得。PLMDebug 是一個命令列工具,允許您為特定.appx 套裝軟體使用 /enableDebug 開關禁用 PLM。您可以查看所有已安裝的應用程式套裝軟體通過 Windows PowerShell 命令 Get AppxPackage 或通過進程資源管理器 (如本文中稍後所述) 來標識特定的.appx 包 id。

PLMDebug 有幾個方便的功能。例如,它允許您顯式地將各種事件發送到您的應用程式,包括暫停、 恢復、 終止,終止生效和終止潔淨。它還允許您附加即時調試器 (,我們不會涵蓋在這篇文章)。

Visual Studio還可以觸發掛起和恢復事件,使用調試位置工具列,它並不是在預設情況下可見。您可以通過選擇視圖添加它 |工具列 |調試位置。一旦你積極調試您的應用程式,將啟用調試選項。圖 1 Visual Studio2013年預覽中顯示調試位置工具列。


圖 1 調試位置工具列

背景工作

很多方案,例如,更新即時圖塊,可以完成而無需使用一個背景工作,但有時背景工作是必要的它們代表了另一種可以由於您定義的特定系統條件對您的 Windows 存儲應用程式中的代碼進行隱式啟動。例如,您可能想要添加或創建縮略圖,在後臺為您的應用程式之一,但你只想要做的時候設備使用交流電源。維護觸發器允許您啟動基於時間間隔和系統條件下,一些任務,並重複執行的任務。雖然背景工作的代碼在您的應用程式中定義的但在大多數情況下它被執行由單獨的進程名為 BackgroundTaskHost。

Windows 應用程式商店註冊其背景工作在 OS 級別背景工作基礎結構通過使用 BackgroundTaskBuilder 類。背景工作創建為實現 IBackgroundTask 介面,該介面的類,您只需執行 Run 方法。背景工作必須有確切地一個觸發,設置的一個或多個條件,描述要啟動的背景工作在其中確切的情況。觸發器是用 BackgroundTaskBuilder 類的 SetTrigger 方法指定的。

Visual Studio,可以找到並調試註冊的背景工作很容易,因為調試位置工具列上將會顯示您的應用程式聲明的背景工作,允許您通過Visual Studio視覺介面啟動它們。這種技術適用于開始所有的背景工作,除了那些使用 ControlChannelTrigger、 PushNotificationTrigger 或 SystemTrigger 與 SmsReceived 觸發器的類型。有關詳細資訊,請參見在"引入到背景工作"白皮書 aka.ms/O35jqc。你就會找到好的代碼示例在 bit.ly/IZpfqN

啟動

有許多方法可以根據您已經實現什麼,如檔、 協定、 PrintTaskSettings 或 ShareTarget 啟動您的應用程式。例如,當某個使用者共用東西從另一個應用程式向您的應用程式的 ShareTarget 啟動類型會處於活動狀態。

有了一些變化的 Windows 8.1 關於啟動。例如,搜索啟動已被否決,但仍有一些向後相容性支援。也有新的創新方式啟動其他應用程式與您的應用程式共用螢幕。這意味著您的應用程式時仍處於活動狀態,您可以與瀏覽器共用螢幕。你會發現在此功能的詳細資訊 bit.ly/11ckVS3

若要調試您的應用程式從任何這些類型的啟動,你的第一步是要轉到您的應用程式專案屬性開始行動。啟動 ContosoCookbookVisual Studio的解決方案資源管理器中按右鍵並選擇屬性。選中的核取方塊,"不啟動,但當它啟動時,調試我的代碼"中看出圖 2。有此設置你就能調試您的應用程式,並在您將由任何其他啟動類型觸發啟動時的 OnLaunched 處理常式中放置中斷點。此設置通知要準備好調試,但實際上並不啟動時啟動調試器會話的應用程式。該應用程式將會只是等待。


圖 2 設置調試器屬性

探索運行的應用程式

進程資源管理器中提供了一些有用的功能,當你想要看一眼在運行的應用程式的內部工作原理。若要查看這些功能,我們將探討一些叫孩子們車顏色,您可以從下載一個應用程式中的代碼 bit.ly/YnmAxT。轉到開始螢幕並啟動孩子的車顏色應用程式,然後啟動進程資源管理器 (假設您先前設置了)。

如果您展開 svchost.exe,您會看到運行時經紀人和任何執行 Windows 應用商店應用程式,如中所示圖 3。通過按右鍵 KidsCarColors.exe,您可以查看的屬性,例如根資料夾安裝。


圖 3 進程資源管理器從 SysInternals

應用程式在進程資源管理器中的屬性視窗提供了豐富的資訊。例如,作為圖 4 顯示圖像選項卡允許您查看的是給定的已安裝應用程式的位置。內置應用程式和應用程式總是從 Windows 應用商店下載安裝的 [根資料夾] \Program Files\Windows 應用程式資料夾中。


圖 4 在孩子們的車顏色應用程式的屬性

您還可以找到.NET 性能選項卡有用 ; 它提供了基本的效能計數器的資訊,包括這種東西作為堆大小、 Gen 0 集合的數量和垃圾回收 (GC) 所用的時間百分比。看著這些效能計數器允許您的成效,GC,這就是當物件不再被引用時釋放記憶體的機制。它可能需要修改更多積極釋放記憶體的應用程式的代碼,它不需要時。你可以瞭解更多有關.NET 效能計數器在 msdn.microsoft.com/library/w8f5kw2e

您可能需要更改擁有權和 C:\Program Files\Windows 應用程式資料夾的許可權,以便您可以查看它裡面的應用程式。

在 C:\Program Files\Windows 應用程式內, 並行資料夾存在為每個已安裝的應用程式。這些應用程式資料夾中每個擁有豐富的資訊下, 一節中所述。

流覽代碼

如指出的你可以去個別應用程式的安裝目錄,找到大量的應用程式,如所有的 MP3 檔 (如果有)、 圖像、 XAML 檔和其他資源的資訊。但是,您將無法檢查 XAML 檔,對於 Windows 8.1 應用程式,因為他們已經被編譯成二進位檔案。但有的各種工具,允許您進行反編譯 C# 和Visual Basic.NET 編寫的 Windows 應用商店的應用程式可執行檔。

我們會反編譯使用 JustDecompile 工具從 Telerik 的 KidsCarColors.exe。反編譯是考慮應用程式二進位和生成可讀原始程式碼的過程。要這樣做,只是導航到應用程式的安裝資料夾,如前面說過,KidsCarColors.exe 右擊並選擇打開與 JustDecompile。如中所示圖 5,你現在可以看到低級細節揭示的解編程式的代碼。請注意在應用程式內的資料模型是易於破譯和流覽。JustDecompile 容易地恢復丟失的原始程式碼或同行到程式集,發現外部的 bug 的根源。這意味著您可以查看幾乎任何已安裝的 Windows 存儲應用程式的原始程式碼。


圖 5 Decompiling KidsCarColors.exe

它是卓越多少資訊是可用的此工具。在創建中孩子們的車顏色,花了一些努力,獲取音訊工作好當一個孩子點擊汽車顏色。但所有的代碼暴露。如果您導航到 JustDecompile 專案資源管理器中的 ItemDetailPage 物件,您將能夠發現到底如何演奏的音效檔是:從本機存放區,具現化各種 MediaElements、 註冊媒體回檔事件、 調用 SetSource,所以檢索 MP3。為任何人想要複製這個方法,它是所有那裡,接觸到世界。

JustDecompile 提供了幾個按鈕在其工具列中,包括的程式集清單按鈕,使您可以探索應用程式已設置的引用。只知道什麼 Windows 存儲應用程式已設置的引用告訴你一些有關哪些功能,應用程式使用。例如,您可以看到孩子的車顏色利用廣告 SDK。那有意義,因為該應用程式不會顯示廣告。理論上,但是,您可以設置對您從來沒有使用的程式集的引用。想像一下我們刪除廣告裡面 app 但忘了刪除對廣告 SDK 程式集的引用。JustDecompile 使您能夠看到完全在野生環境中運行的版本和代碼和引用的樣子。

JustDecompile 還包括一個稱為查找的使用實例,允許您複製Visual Studio中的查找所有引用命令的功能。您可以對任何 Namespace、 類型或成員只需按住 ctrl 鍵按一下在編譯代碼以獲取相應的所有代碼引用的清單中。這可以是有關應用程式如何工作而無需任何原始程式碼學習中很大的説明。

總結

要最大化你的效力作為 Windows 應用商店的應用程式開發人員,您需要有好的理解如何調試應用程式。這篇文章給你一些工具和技術可以用於查找和修復您的代碼中的問題的簡要概述。此外,一些的技術可以説明您學習其他 Windows 應用商店的應用程式是如何工作的即使你沒有原始程式碼,該代碼。

Bruno Terkaly 是微軟開發者福音傳教士。他淵博的知識是來自在該領域使用眾多平台、語言、架構、SDK、程式庫和 API 撰寫程式碼的多年經驗。他花時間編寫代碼,寫博客,給現場演示上構建基於雲計算的應用程式,具體地使用 Windows Azure 平臺。您可以閱讀他的博客在 blogs.msdn.com/b/brunoterkaly

Robert Evans  是總理現場工程師和 Windows 8 的技術負責人:Windows 應用商店 App 實驗室。他是微軟認證專業開發人員和 Windows 8 開發訓練營碩士生導師。他已在 TechReady、 GeekReady 和平板顯示,提出並主持 Windows 8 硬體實驗室在 Microsoft 生成會議除了眾多 Windows 8 話事件。在成為總理現場工程師之前, 埃文斯花了 12 年作為一名軟體發展工程師在 Microsoft 工作 Xbox Live、 MSN 和移動工程在 Microsoft IT 等各類產品。您可以閱讀的總理欄位工程的博客,他貢獻,在 aka.ms/Utg864

由於以下的技術專家對本文的審閱:雌激素克里斯多夫 · 納 (Microsoft)
克里斯多夫 · 納工作在微軟開發的支援小組。1996 年以來,他擔任技術編輯在許多書上,並為 MSDN 雜誌寫的幾篇文章。