Condividi tramite


Strumenti di test e debug per la gestione del ciclo di vita dei processi (PLM)

Una delle principali differenze tra le app UWP e le applicazioni desktop tradizionali è che i titoli UWP risiedono in un contenitore di app soggetto a Gestione del ciclo di vita dei processi (PLM). Le app UWP possono essere sospese, riprese o terminate in tutte le piattaforme dal servizio Runtime Broker e sono disponibili strumenti dedicati da usare per forzare le transizioni durante il test o il debug del codice che li gestisce.

Funzionalità in Visual Studio 2015

Il debugger predefinito in Visual Studio 2015 consente di analizzare potenziali problemi quando si usano funzionalità esclusive UWP. È possibile forzare l'applicazione in diversi stati del ciclo di vita PLM utilizzando la barra degli strumenti eventi del ciclo di vita, che diventa visibile quando si esegue e si effettua il debug dell'applicazione.

Barra degli strumenti per gli eventi del ciclo di vita

Lo strumento PLMDebug

PLMDebug.exe è uno strumento da riga di comando che consente di controllare lo stato PLM di un pacchetto dell'applicazione ed è incluso nel Windows SDK. Dopo l'installazione, lo strumento si trova in C:\Programmi (x86)\Windows Kits\10\Debuggers\x64 per impostazione predefinita.

PLMDebug consente anche di disabilitare PLM per qualsiasi pacchetto di applicazione installato, operazione necessaria per alcuni debugger. La disabilitazione di PLM impedisce al servizio Runtime Broker di terminare l'app prima di avere la possibilità di eseguire il debug. Per disabilitare PLM, usa l'opzione /enableDebug, seguito dal nome completo del pacchetto della tua app UWP (il nome breve, il nome della famiglia del pacchetto o l'AUMID di un pacchetto non funzionerà):

plmdebug /enableDebug [PackageFullName]

Dopo aver distribuito l'app UWP da Visual Studio, il nome completo del pacchetto viene visualizzato nella finestra di output. In alternativa, è anche possibile recuperare il nome completo del pacchetto eseguendo Get-AppxPackage in una console di PowerShell.

esecuzione di Get-AppxPackage

Facoltativamente, puoi specificare un percorso assoluto per un debugger che verrà avviato automaticamente quando il pacchetto dell'app viene attivato. Se si vuole eseguire questa operazione usando Visual Studio, è necessario specificare VSJITDebugger.exe come debugger. Tuttavia, VSJITDebugger.exe richiede di specificare l'opzione "-p", insieme all'ID processo (PID) dell'app UWP. Poiché non è possibile conoscere a priori il PID della tua app UWP, questo scenario non è possibile.

Puoi aggirare questa limitazione scrivendo uno script o uno strumento che identifica il processo del gioco, poi eseguire VSJITDebugger.exe, passando il PID dell'app UWP. L'esempio di codice C# seguente illustra un approccio semplice per eseguire questa operazione.

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

Esempio di utilizzo di questo insieme a PLMDebug:

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

dove Game è il nome del processo e 279f7062-ce35-40e8-a69f-cc22c08e0bb8_1.0.0.0_x86__c6sq6kwgxxfcg è il nome completo del pacchetto dell'app UWP di esempio.

Si noti che ogni chiamata a /enableDebug deve essere successivamente associata a un'altra chiamata PLMDebug con l'opzione /disableDebug . Inoltre, il percorso del debugger deve essere assoluto (i percorsi relativi non sono supportati).