Partager via


Outils de test et de débogage pour la gestion de la durée de vie des processus (PLM)

L’une des principales différences entre les applications UWP et les applications de bureau traditionnelles est que les titres UWP résident dans un conteneur d’applications soumis à la gestion du cycle de vie des processus (PLM). Les applications UWP peuvent être suspendues, reprise ou arrêtées sur toutes les plateformes par le service Runtime Broker, et il existe des outils dédiés à utiliser pour forcer ces transitions lorsque vous testez ou déboguez le code qui les gère.

Fonctionnalités de Visual Studio 2015

Le débogueur intégré dans Visual Studio 2015 peut vous aider à examiner les problèmes potentiels lors de l’utilisation de fonctionnalités exclusives UWP. Vous pouvez forcer votre application à adopter différents états PLM à l’aide de la barre d’outils événements de cycle de vie, qui devient visible lorsque vous exécutez et déboguez votre application.

barre d’outils des événements de cycle de vie

Outil PLMDebug

PLMDebug.exe est un outil en ligne de commande qui vous permet de contrôler l’état PLM d’un package d’application et est fourni dans le cadre du Kit de développement logiciel (SDK) Windows. Une fois installé, l’outil réside dans C :\Program Files (x86)\Windows Kits\10\Debuggers\x64 par défaut.

PLMDebug vous permet également de désactiver LE PLM pour tout package d’application installé, ce qui est nécessaire pour certains débogueurs. La désactivation du PLM empêche le service Runtime Broker de mettre fin à votre application avant de pouvoir déboguer. Pour désactiver PLM, utilisez le commutateur /enableDebug, suivi du nom complet du package de votre application UWP (le nom court, le nom de famille du package ou l'AUMID d'un package ne fonctionneront pas) :

plmdebug /enableDebug [PackageFullName]

Après avoir déployé votre application UWP à partir de Visual Studio, le nom complet du package s’affiche dans la fenêtre de sortie. Vous pouvez également récupérer le nom complet du package en exécutant Get-AppxPackage dans une console PowerShell.

exécution de l' Get-AppxPackage

Si vous le souhaitez, vous pouvez spécifier un chemin absolu vers un débogueur qui se lance automatiquement lorsque votre package d’application est activé. Si vous souhaitez effectuer cette opération à l’aide de Visual Studio, vous devez spécifier VSJITDebugger.exe en tant que débogueur. Toutefois, VSJITDebugger.exe exige que vous spécifiiez le commutateur « -p », ainsi que l’ID de processus (PID) de l’application UWP. Étant donné qu’il n’est pas possible de connaître au préalable le PID de votre application UWP, ce scénario n’est pas possible hors de la boîte de dialogue.

Vous pouvez contourner cette limitation en écrivant un script ou un outil qui identifie le processus de votre jeu, puis l’interpréteur de commandes s’exécute VSJITDebugger.exe, en passant le PID de votre application UWP. L’exemple de code C# suivant illustre une approche simple pour y parvenir.

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

Exemple d’utilisation de ceci conjointement avec PLMDebug :

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

Game est le nom du processus, et 279f7062-ce35-40e8-a69f-cc22c08e0bb8_1.0.0.0_x86__c6sq6kwgxxfcg correspond au nom complet du package d’exemple d’application UWP.

Notez que chaque appel à /enableDebug doit être couplé ultérieurement à un autre appel PLMDebug avec le commutateur /disableDebug. En outre, le chemin d’accès à un débogueur doit être nécessairement absolu (les chemins relatifs ne sont pas pris en charge).