Udostępnij za pomocą


Narzędzia do testowania i debugowania zarządzania okresami istnienia procesów (PLM)

Jedną z kluczowych różnic między aplikacjami platformy UWP a tradycyjnymi aplikacjami stacjonarnymi jest to, że aplikacje UWP znajdują się w kontenerze aplikacji podlegającym zarządzaniu cyklem życia procesów (PLM). Aplikacje platformy UWP można zawiesić, wznowić lub zakończyć na wszystkich platformach przez usługę Broker środowiska uruchomieniowego. Istnieją dedykowane narzędzia, których można użyć, aby wymusić te przejścia podczas testowania lub debugowania kodu, który je obsługuje.

Funkcje w programie Visual Studio 2015

Wbudowany debuger w programie Visual Studio 2015 może pomóc w zbadaniu potencjalnych problemów podczas korzystania z funkcji wyłącznych platformy UWP. Możesz ustawić swoją aplikację w różnych stanach PLM, używając paska narzędzi zdarzeń cyklu życia, który pojawia się, gdy uruchamiasz i debugujesz aplikację.

pasek narzędzi zdarzeń cyklu życia

Narzędzie PLMDebug

PLMDebug.exe to narzędzie wiersza polecenia, które umożliwia sterowanie stanem PLM pakietu aplikacji i jest dostarczane jako część zestawu Windows SDK. Po zainstalowaniu narzędzie znajduje się w C:\Program Files (x86)\Windows Kits\10\Debuggers\x64 domyślnie.

PlMDebug umożliwia również wyłączenie plM dla dowolnego zainstalowanego pakietu aplikacji, co jest niezbędne dla niektórych debugerów. Wyłączenie usługi PLM uniemożliwia usłudze Runtime Broker zakończenie aplikacji przed rozpoczęciem debugowania. Aby wyłączyć PLM, użyj przełącznika /enableDebug, a następnie pełnej nazwy pakietu aplikacji UWP (nie będzie działać krótka nazwa, nazwa rodziny pakietów ani identyfikator AUMID pakietu):

plmdebug /enableDebug [PackageFullName]

Po wdrożeniu aplikacji platformy UWP z poziomu programu Visual Studio pełna nazwa pakietu zostanie wyświetlona w oknie danych wyjściowych. Możesz również pobrać pełną nazwę pakietu, uruchamiając Get-AppxPackage w konsoli programu PowerShell.

Uruchamianie Get-AppxPackage

Opcjonalnie możesz określić ścieżkę bezwzględną do debugera, który zostanie automatycznie uruchomiony po aktywowaniu pakietu aplikacji. Jeśli chcesz to zrobić przy użyciu programu Visual Studio, musisz określić VSJITDebugger.exe jako debuger. Jednak VSJITDebugger.exe wymaga określenia przełącznika "-p" wraz z identyfikatorem procesu (PID) aplikacji UWP. Ponieważ nie można wcześniej znać identyfikatora PID dla aplikacji UWP, ten scenariusz nie jest możliwy bez dodatkowej konfiguracji.

Możesz obejść to ograniczenie, pisząc skrypt lub narzędzie, które identyfikuje proces gry, a następnie uruchamia powłokę VSJITDebugger.exe, przekazując PID aplikacji platformy UWP. Poniższy przykład kodu w języku C# ilustruje proste podejście do tego celu.

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();
        }
    }
}

Przykładowe użycie tego elementu w połączeniu z plMDebug:

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

gdzie Game jest nazwą procesu, a 279f7062-ce35-40e8-a69f-cc22c08e0bb8_1.0.0.0_x86__c6sq6kwgxxfcg jest pełną nazwą pakietu przykładowego pakietu aplikacji platformy UWP.

Należy pamiętać, że każde wywołanie /enableDebug musi być później połączone z innym wywołaniem PLMDebug z przełącznikiem /disableDebug. Ponadto ścieżka do debugera musi być bezwzględna (ścieżki względne nie są obsługiwane).