共用方式為


處理程序生命週期管理 (PLM) 的測試與偵錯工具

UWP 應用程式和傳統型應用程式之間的其中一個主要差異在於 UWP 標題位於受程序生命週期管理 (PLM) 約束的應用程式容器中。 UWP 應用程式可由 Runtime Broker 服務在所有平台上暫停、繼續或終止,而且有專用的工具可供您在測試或偵錯處理這些轉換的程式碼時用於強制執行這些轉換。

Visual Studio 2015 中的功能

Visual Studio 2015 中的內建偵錯工具可協助您調查使用 UWP 獨佔功能時的潛在問題。 您可以使用生命週期事件工具列 (當您執行並偵錯標題時就會看見此工具列),強制您的應用程式進入不同的 PLM 狀態。

生命週期事件工具列

PLMDebug 工具

PLMDebug.exe 是命令列工具,可讓您控制應用程式套件的 PLM 狀態,並隨附在 Windows SDK 中。 安裝之後,此工具的預設位置為 C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

PLMDebug 也可讓您針對任何已安裝的應用程式套件停用 PLM,這是某些偵錯工具的必要項目。 停用 PLM 可防止 Runtime Broker 服務在您有機會進行偵錯之前終止您的應用程式。 若要停用 PLM,請使用 /enableDebug 參數,後面接著 UWP 應用程式的完整套件名稱 (套件的簡短名稱、套件系列名稱或 AUMID 將無法運作):

plmdebug /enableDebug [PackageFullName]

從 Visual Studio 部署 UWP 應用程式之後,完整套件名稱會顯示在輸出視窗中。 或者,您也可以在 PowerShell 主控台中執行 Get-AppxPackage,以擷取完整套件名稱。

執行 Get-AppxPackage

您可以選擇性地指定偵錯工具的絕對路徑,以在應用程式套件啟動時自動啟動。 如果您想要使用 Visual Studio 執行這項操作,您必須將 VSJITDebugger.exe 指定為偵錯工具。 不過,VSJITDebugger.exe 會要求您指定 “-p” 參數,以及 UWP 應用程式的程序識別碼 (PID)。 因為無法事先知道 UWP 應用程式的 PID,所以此案例不可能立即可用。

您可以撰寫識別遊戲流程的指令碼或工具,然後殼層會執行 VSJITDebugger.exe,以傳入 UWP 應用程式的 PID 來解決此問題。 下列 C# 程式碼範例說明完成這項作業的直接方法。

using System.Diagnostics;

namespace VSJITLauncher
{
    class Program
    {
        static void Main(string[] args)
        {
            // Name of UWP process, which can be retrieved via Task Manager.
            Process[] processes = Process.GetProcessesByName(args[0]);

            // Get PID of most recent instance
            // Note the highest PID is arbitrary. Windows may recycle or wrap the PID at any time.
            int highestId = 0;
            foreach (Process detectedProcess in processes)
            {
                if (detectedProcess.Id > highestId)
                    highestId = detectedProcess.Id;
            }

            // Launch VSJITDebugger.exe, which resides in C:\Windows\System32
            ProcessStartInfo startInfo = new ProcessStartInfo("vsjitdebugger.exe", "-p " + highestId);
            startInfo.UseShellExecute = true;

            Process process = new Process();
            process.StartInfo = startInfo;
            process.Start();
        }
    }
}

搭配 PLMDebug 使用此工具的範例:

plmdebug /enableDebug 279f7062-ce35-40e8-a69f-cc22c08e0bb8_1.0.0.0_x86__c6sq6kwgxxfcg "\"C:\VSJITLauncher.exe\" Game"

其中 Game 是程序名稱,而 279f7062-ce35-40e8-a69f-cc22c08e0bb8_1.0.0.0_x86__c6sq6kwgxxfcg 是範例 UWP 應用程式套件的完整套件名稱。

請注意,對 /enableDebug 的每次呼叫稍後都必須使用 /disableDebug 參數來與另一個 PLMDebug 呼叫結合。 此外,偵錯工具的路徑必須是絕對路徑 (不支援相對路徑)。