Freigeben über


Testen und Debuggen von Tools für die Prozesslebensdauerverwaltung (Process Lifetime Management, PLM)

Einer der wichtigsten Unterschiede zwischen UWP-Apps und herkömmlichen Desktopanwendungen besteht darin, dass sich UWP-Titel in einem App-Container befinden, der der Prozesslebenszyklusverwaltung (Process Lifecycle Management, PLM) unterliegt. UWP-Apps können vom Runtime Broker-Dienst auf allen Plattformen angehalten, fortgesetzt oder beendet werden. Es gibt spezielle Tools, die Sie verwenden können, um diese Übergänge zu erzwingen, wenn Sie den Code testen oder debuggen, der dafür zuständig ist.

Funktionen in Visual Studio 2015

Der integrierte Debugger in Visual Studio 2015 kann Ihnen helfen, potenzielle Probleme bei verwendung von UWP-exklusiven Features zu untersuchen. Sie können Ihre Anwendung in verschiedene PLM-Zustände versetzen, indem Sie die Symbolleiste Lifecycle-Ereignisse verwenden, die sichtbar wird, wenn Sie Ihren Titel ausführen und debuggen.

Symbolleiste für Lebenszyklus-Ereignisse

Das PLMDebug-Tool

PLMDebug.exe ist ein Befehlszeilentool, mit dem Sie den PLM-Status eines Anwendungspakets steuern können. Es wird als Teil des Windows SDK ausgeliefert. Nach der Installation befindet sich das Tool standardmäßig in C:\Programme (x86)\Windows Kits\10\Debuggers\x64 .

PLMDebug ermöglicht es Ihnen auch, PLM für jedes installierte App-Paket zu deaktivieren, das für einige Debugger erforderlich ist. Durch deaktivieren von PLM wird verhindert, dass der Runtime Broker-Dienst Ihre App beendet, bevor Sie die Möglichkeit haben, zu debuggen. Um PLM zu deaktivieren, verwenden Sie die option /enableDebug gefolgt vom vollständigen Paketnamen Ihrer UWP-App (der Kurzname, paketfamilienname oder AUMID eines Pakets funktioniert nicht):

plmdebug /enableDebug [PackageFullName]

Nach der Bereitstellung Ihrer UWP-App aus Visual Studio wird der vollständige Paketname im Ausgabefenster angezeigt. Alternativ können Sie auch den vollständigen Paketnamen abrufen, indem Sie Get-AppxPackage in einer PowerShell-Konsole ausführen.

Get-AppxPackage ausführen

Optional können Sie einen absoluten Pfad zu einem Debugger angeben, der beim Aktivieren des App-Pakets automatisch gestartet wird. Wenn Sie dies mit Visual Studio tun möchten, müssen Sie VSJITDebugger.exe als Debugger angeben. VSJITDebugger.exe erfordert jedoch, dass Sie den Schalter "-p" zusammen mit der Prozess-ID (PID) der UWP-App angeben. Da es nicht möglich ist, die PID Ihrer UWP-App vorher zu kennen, ist dieses Szenario nicht sofort möglich.

Sie können diese Einschränkung umgehen, indem Sie ein Skript oder Tool schreiben, das den Prozess Ihres Spiels identifiziert. Anschließend führt die Shell VSJITDebugger.exeaus und übergibt dabei die PID Ihrer UWP-App. Das folgende C#-Codebeispiel veranschaulicht einen einfachen Ansatz, um dies zu erreichen.

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

Beispielhafte Verwendung in Verbindung mit PLMDebug:

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

dabei Game handelt es sich um den Prozessnamen und 279f7062-ce35-40e8-a69f-cc22c08e0bb8_1.0.0.0_x86__c6sq6kwgxxfcg den vollständigen Paketnamen des Beispiel-UWP-App-Pakets.

Beachten Sie, dass jeder Aufruf von /enableDebug später mit einem anderen PLMDebug-Aufruf mit dem Schalter /disableDebug gekoppelt werden muss. Darüber hinaus muss der Pfad zu einem Debugger absolut sein (relative Pfade werden nicht unterstützt).