Compartir a través de


Herramientas de prueba y depuración para la Gestión del Ciclo de Vida del Proceso (PLM)

Una de las principales diferencias entre las aplicaciones para UWP y las aplicaciones de escritorio tradicionales es que los títulos de UWP residen en un contenedor de aplicaciones sujeto a administración del ciclo de vida del proceso (PLM). Las aplicaciones UWP pueden suspenderse, reanudarse o finalizarse en todas las plataformas por el servicio Runtime Broker, y hay herramientas dedicadas que puedes utilizar para forzar esas transiciones cuando pruebes o depures el código que las maneja.

Características de Visual Studio 2015

El depurador integrado de Visual Studio 2015 puede ayudarle a investigar posibles problemas al usar características exclusivas de UWP. Puede forzar su aplicación a diferentes estados del PLM mediante la barra de herramientas de Eventos del Ciclo de Vida , que se vuelve visible cuando ejecuta y depura su título.

Barra de herramientas de eventos del ciclo de vida

La herramienta PLMDebug

PLMDebug.exe es una herramienta de línea de comandos que permite controlar el estado PLM de un paquete de aplicación y se envía como parte de Windows SDK. Una vez instalada, la herramienta reside en C:\Archivos de programa (x86)\Windows Kits\10\Debuggers\x64 de forma predeterminada.

PLMDebug también permite deshabilitar PLM para cualquier paquete de aplicación instalado, que es necesario para algunos depuradores. Deshabilitar PLM impide que el servicio Runtime Broker termine tu aplicación antes de que tengas la oportunidad de depurar. Para deshabilitar PLM, utiliza el modificador /enableDebug, seguido del nombre completo del paquete de tu aplicación UWP (el nombre corto, el nombre de familia del paquete o el AUMID de un paquete no funcionará):

plmdebug /enableDebug [PackageFullName]

Después de implementar la aplicación para UWP desde Visual Studio, el nombre completo del paquete se muestra en la ventana de salida. Como alternativa, también puede recuperar el nombre completo del paquete ejecutando get-AppxPackage en una consola de PowerShell.

ejecutar Get-AppxPackage

Opcionalmente, puedes especificar una ruta de acceso absoluta a un depurador que se iniciará automáticamente cuando se active el paquete de la aplicación. Si desea hacerlo con Visual Studio, deberá especificar VSJITDebugger.exe como depurador. Sin embargo, VSJITDebugger.exe requiere que especifiques el modificador "-p", junto con el identificador de proceso (PID) de la aplicación UWP. Dado que no es posible conocer el PID de tu aplicación para UWP de antemano, este escenario no es posible de forma predeterminada.

Puedes solucionar esta limitación escribiendo un script o herramienta que identifique el proceso del juego y, a continuación, el shell se ejecuta VSJITDebugger.exe, pasando el PID de tu aplicación para UWP. En el ejemplo de código de C# siguiente se muestra un enfoque sencillo para lograr esto.

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

Ejemplo de uso de esto junto con PLMDebug:

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

donde Game es el nombre del proceso y 279f7062-ce35-40e8-a69f-cc22c08e0bb8_1.0.0.0_x86__c6sq6kwgxxfcg es el nombre completo del paquete de la aplicación para UWP de ejemplo.

Tenga en cuenta que todas las llamadas a /enableDebug deben vincularse más tarde a otra llamada PLMDebug con el interruptor de /disableDebug. Además, la ruta de acceso a un depurador debe ser absoluta (no se admiten rutas de acceso relativas).