Débogage d’une application UWP à l’aide de WinDbg

Vous pouvez déboguer une application plateforme Windows universelle (UWP) à l’aide de WinDbg. Cette approche est généralement utilisée pour les scénarios avancés, où il n’est pas possible d’effectuer la tâche de débogage à l’aide du débogueur Visual Studio intégré. Pour plus d’informations sur le débogage dans Visual Studio, consultez Débogage dans Visual Studio.

Attachement à une application UWP

L’attachement au processus UWP est identique à l’attachement à un processus en mode utilisateur. Par exemple, dans WinDbg, vous pouvez vous attacher à un processus en cours d’exécution en choisissant Attacher à un processus dans le menu Fichier ou en appuyant sur F6. Pour plus d’informations, consultez Débogage d’un processus de User-Mode à l’aide de WinDbg.

Une application UWP ne sera pas suspendue de la même manière que lorsqu’elle n’est pas déboguée. Pour suspendre/reprendre explicitement une application UWP, vous pouvez utiliser les commandes .suspendpackage et .resumepackage (détails ci-dessous). Pour obtenir des informations générales sur la gestion du cycle de vie des processus (PLM) utilisée par les applications UWP, consultez Cycle de vie des applications et Lancement, reprise et tâches en arrière-plan.

Lancement et débogage d’une application UWP

Les paramètres de ligne de commande -plmPackage et -plmApp indiquent au débogueur de lancer une application sous le débogueur.

windbg.exe -plmPackage <PLMPackageName> -plmApp <ApplicationId> [<parameters>]

Étant donné que plusieurs applications peuvent être contenues dans un seul package, les <paramètres PLMPackage> et <ApplicationId> sont requis. Il s’agit d’un résumé des paramètres.

Paramètre Description
<PLMPackageName> Nom du package d’application. Utilisez la commande .querypackages pour répertorier toutes les applications UWP. Ne fournissez pas de chemin d’accès à l’emplacement du package, indiquez uniquement le nom du package.
<ApplicationId>

L’ApplicationId se trouve dans le fichier manifeste de l’application et peut être consulté à l’aide de la commande .querypackage ou .querypackages, comme décrit dans cette rubrique.

Pour plus d’informations sur le fichier manifeste de l’application, consultez Manifeste du package d’application.

[<paramètres>]

Paramètres facultatifs passés à l’application. Toutes les applications n’utilisent pas ou n’ont pas besoin de paramètres.

Exemple HelloWorld

Pour illustrer le débogage UWP, cette rubrique utilise l’exemple HelloWorld décrit dans Créer une application « Hello, world » (XAML).

Pour créer une application de test utilisable, il suffit d’effectuer jusqu’à l’étape 3 du labo.

Localisation du nom du package complet et de l’AppId

Utilisez la commande .querypackages pour rechercher le nom complet du package et l’AppId. Tapez .querypackages, puis user CRTL+F pour rechercher dans la sortie le nom de l’application, par exemple HelloWorld. Lorsque l’entrée se trouve à l’aide de CTRL+F, elle affiche le nom complet du package, par exemple e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8 et l’AppId de l’application.

Exemple :

0:000>  .querypackages 
...
Package Full Name: e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8
Package Display Name: HelloWorld
Version: 1.0.0.0
Processor Architecture: x86
Publisher: CN=user1
Publisher Display Name: user1
Install Folder: c:\users\user1\documents\visual studio 2015\Projects\HelloWorld\HelloWorld\bin\x86\Release\AppX
Package State: Unknown
AppId: App
...

Affichage du nom du package de base dans le manifeste

Pour résoudre les problèmes, vous pouvez afficher le nom du package de base dans Visual Studio.

Pour rechercher le nom du package de base dans Visual Studio, cliquez sur le fichier ApplicationManifest.xml dans l’Explorateur de projets. Le nom du package de base s’affiche sous l’onglet empaquetage sous la forme « Nom du package ». Par défaut, le nom du package est un GUID, par exemple e24caf14-8483-4743-b80c-ca46c28c75df.

Pour utiliser le bloc-notes afin de localiser le nom du package de base, ouvrez le fichier ApplicationManifest.xml et recherchez la balise Nom d’identité .

  <Identity
    Name="e24caf14-8483-4743-b80c-ca46c28c75df"
    Publisher="CN= User1"
    Version="1.0.0.0" />

Localisation de l’ID d’application dans le manifeste

Pour localiser l’ID d’application dans le fichier manifeste d’une application UWP installée, recherchez l’entrée ID d’application .

Par exemple, pour l’application hello world, l’ID d’application est Application.

<Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="HelloWorld.App">

Exemple de ligne de commande WinDbg

Il s’agit d’un exemple de ligne de commande qui charge l’application HelloWorld sous le débogueur en utilisant le nom complet du package et AppId.

windbg.exe -plmPackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8 -plmApp App

Lancement d’une tâche en arrière-plan sous le débogueur

Une tâche en arrière-plan peut être lancée explicitement sous le débogueur à partir de la ligne de commande à l’aide de TaskId. Pour ce faire, utilisez les paramètres de ligne de commande -plmPackage et -plmBgTaskId :

windbg.exe -plmPackage <PLMPackageName> -plmBgTaskId <BackgroundTaskId>
Paramètre Description
<PLMPackageName>

Nom du package d’application. Utilisez la commande .querypackages pour répertorier toutes les applications UWP. Ne fournissez pas de chemin d’accès à l’emplacement du package, indiquez uniquement le nom du package.

<BackgroundTaskId>

Le BackgroundTaskId peut être localisé à l’aide de la commande .querypackages, comme décrit ci-dessous.

Pour plus d’informations sur le fichier manifeste de l’application, consultez Manifeste du package d’application.

Il s’agit d’un exemple de chargement du code SDKSamples.BackgroundTask sous le débogueur.

windbg.exe -plmPackage Microsoft.SDKSamples.BackgroundTask.CPP_1.0.0.0_x64__8wekyb3d8bbwe -plmBgTaskId {ee4438ee-22db-4cdd-85e4-8ad8a1063523}

Vous pouvez tester l’exemple de code de tâche en arrière-plan pour vous familiariser avec le débogage UWP. Il peut être téléchargé dans l’exemple de tâche en arrière-plan.

Utilisez la commande .querypackages pour localiser le BackgroundTaskId. Utilisez CTRL-F pour localiser l’application, puis localisez le champ ID de tâche en arrière-plan . La tâche en arrière-plan doit être en cours d’exécution pour afficher le nom et l’ID de la tâche en arrière-plan associés.

0:000> .querypackages
...
Package Full Name: Microsoft.SDKSamples.BackgroundTask.CPP_1.0.0.0_x86__8wekyb3d8bbwe
Package Display Name: BackgroundTask C++ sample
Version: 1.0.0.0
Processor Architecture: x86
Publisher: CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Publisher Display Name: Microsoft Corporation
Install Folder: C:\Users\user1\Documents\Visual Studio 2015\Projects\Background_task_sample\C++\Debug\BackgroundTask.Windows\AppX
Package State: Running
AppId: BackgroundTask.App
Background Task Name: SampleBackgroundTask
Background Task Id: {ee4438ee-22db-4cdd-85e4-8ad8a1063523}
...

Si vous connaissez le nom complet du package, vous pouvez utiliser .querypackage pour afficher le champ ID de tâche en arrière-plan .

Vous pouvez également localiser le BackgroundTaskId à l’aide de l’option enumerateBgTasks du PLMDebug. Pour plus d’informations sur l’utilisation de PMLDebug, consultez PLMDebug.

C:\Program Files\Debugging Tools for Windows (x64)>PLMDebug /enumerateBgTasks Microsoft.SDKSamples.BackgroundTask.CPP_1.0.0.0_x64__8wekyb3d8bbwe
Package full name is Microsoft.SDKSamples.BackgroundTask.CPP_1.0.0.0_x64__8wekyb3d8bbwe.
Background Tasks:
SampleBackgroundTask : {C05806B1-9647-4765-9A0F-97182CEA5AAD}

SUCCEEDED

Débogage d’un processus UWP à distance à l’aide d’un serveur de processus (DbgSrv)

Toutes les commandes -plm* fonctionnent correctement avec dbgsrv. Pour déboguer à l’aide de dbgsrv, utilisez le commutateur -premote avec le chaîne de connexion pour dbgsrv :

windbg.exe -premote npipe:pipe=fdsa,server=localhost -plmPackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8 -plmApp App

Pour plus d’informations sur les options -premote, consultez Serveurs de processus (mode utilisateur) et Exemples de serveurs de processus.

Résumé des commandes d’application UWP

Cette section fournit un résumé des commandes du débogueur d’application UWP

Collecte d’informations sur le package

.querypackage

Le .querypackage affiche l’état d’une application UWP. Par exemple, si l’application est en cours d’exécution, elle peut être à l’état Actif .

.querypackage <PLMPackageName>

Exemple :

0:000> .querypackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8
Package Full Name: e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8
Package Display Name: HelloWorld
Version: 1.0.0.0
Processor Architecture: x86
Publisher: CN=user1
Publisher Display Name: user1
Install Folder: c:\users\user1\documents\visual studio 2015\Projects\HelloWorld\HelloWorld\bin\x86\Release\AppX
Package State: Running
AppId: App
Executable: HelloWorld.exe

.querypackages

La commande .querypackages répertorie toutes les applications UWP installées et leur état actuel.

.querypackages

Exemple :

0:000> .querypackages
...
Package Full Name: Microsoft.MicrosoftSolitaireCollection_3.9.5250.0_x64__8wekyb3d8bbwe
Package Display Name: Microsoft Solitaire Collection
Version: 3.9.5250.0
Processor Architecture: x64
Publisher: CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Publisher Display Name: Microsoft Studios
Install Folder: C:\Program Files\WindowsApps\Microsoft.MicrosoftSolitaireCollection_3.9.5250.0_x64__8wekyb3d8bbwe
Package State: Unknown
AppId: App

Package Full Name: e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8
Package Display Name: HelloWorld
Version: 1.0.0.0
Processor Architecture: x86
Publisher: CN=user1
Publisher Display Name: user1
Install Folder: c:\users\user1\documents\visual studio 2015\Projects\HelloWorld\HelloWorld\bin\x86\Release\AppX
Package State: Running
AppId: App
Executable: HelloWorld.exe

Package Full Name: Microsoft.SDKSamples.BackgroundTask.CPP_1.0.0.0_x86__8wekyb3d8bbwe
Package Display Name: BackgroundTask C++ sample
Version: 1.0.0.0
Processor Architecture: x86
Publisher: CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Publisher Display Name: Microsoft Corporation
Install Folder: C:\Users\user1\Documents\Visual Studio 2015\Projects\Background_task_sample\C++\Debug\BackgroundTask.Windows\AppX
Package State: Unknown
AppId: BackgroundTask.App

...

Lancement d’une application pour le débogage

.createpackageapp

La commande .createpackageapp active le débogage et lance une application UWP.

.createpackageapp <PLMPackageName> <ApplicationId> [<parameters>] 

Ce tableau répertorie les paramètres de .createpackageapp.

Paramètre Description
<PLMPackageName> Nom du package d’application. Utilisez la commande .querypackages pour répertorier toutes les applications UWP. Ne fournissez pas de chemin d’accès à l’emplacement du package, indiquez uniquement le nom du package.
<ApplicationId>

L’Id d’application peut être localisé à l’aide de .querypackages ou .querypackages, comme indiqué plus haut dans cette rubrique.

Pour plus d’informations sur le fichier manifeste de l’application, consultez Manifeste du package d’application.

[<paramètres>] Paramètres facultatifs transmis à l’application. Toutes les applications n’ont pas besoin ou n’utilisent pas ces paramètres facultatifs.

Exemple :

.createpackageapp e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8 App

Activation et désactivation de l’utilisation des commandes de débogage

.enablepackagedebug

La commande .enablepackagedebug permet le débogage pour l’application UWP. Vous devez utiliser .enablepackagedebug avant d’appeler l’une des fonctions de suspension, de reprise ou d’arrêt.

Notez que la commande .createpackageapp permet également le débogage de l’application.

.enablepackagedebug <PLMPackageName>

Exemple :

.enablepackagedebug e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

.disablepackagedebug

La commande .disablepackagedebug désactive le débogage pour l’application UWP.

.disablepackagedebug <PLMPackageName>

Exemple :

.disablepackagedebug e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Démarrage et arrêt des applications

Notez que la suspension, la reprise et la fin affectent toutes les applications en cours d’exécution dans le package.

.suspendpackage

La commande .suspendpackage interrompt une application UWP.

.suspendpackage <PLMPackageName> 

Exemple :

0:024> .suspendpackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

.resumepackage

La commande .resumepackage reprend une application UWP.

.resumepackage <PLMPackageName> 

Exemple :

.resumepackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

.terminatepackageapp

La commande .terminatepackageapp met fin à toutes les applications UWP dans le package.

.terminatepackageapp <PLMPackageName> 

Exemple :

.terminatepackageapp e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Tâches en arrière-plan

.activatepackagebgtask

La commande .activatepackagebgtask active le débogage et lance une tâche en arrière-plan UWP.

 .activatepackagebgtask <PLMPackageName> <bgTaskId>

Exemple :

.activatepackagebgtask Microsoft.SDKSamples.BackgroundTask.CPP_1.0.0.0_x64__8wekyb3d8bbwe {C05806B1-9647-4765-9A0F-97182CEA5AAD}

Exemples d’utilisation

Attacher un débogueur lors du lancement de votre application

Supposons que vous ayez une application nommée HelloWorld qui se trouve dans un package nommé e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8. Vérifiez que votre package est installé en affichant les noms complets et les états en cours d’exécution de tous les packages installés. Dans une fenêtre d’invite de commandes, entrez la commande suivante. Vous pouvez utiliser CTRL+F pour rechercher le nom de l’application HelloWorld dans la sortie de la commande.

.querypackages 
...

Package Full Name: e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8
Package Display Name: HelloWorld
Version: 1.0.0.0
Processor Architecture: x86
Publisher: CN=user1
Publisher Display Name: user1
Install Folder: c:\users\user1\documents\visual studio 2015\Projects\HelloWorld\HelloWorld\bin\x86\Release\AppX
Package State: Unknown
AppId: App

...

Utilisez .createpackageapp pour lancer et attacher à l’application. La commande .createpackageapp permet également le débogage de l’application.

.createpackageapp e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8 App

Une fois le débogage terminé, décrémentez le nombre de références de débogage pour le package à l’aide de la commande .disablepackagedebug.

.disablepackagedebug e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Attacher un débogueur à une application qui est déjà en cours d’exécution

Supposons que vous souhaitiez attacher WinDbg à MyApp, qui est déjà en cours d’exécution. Dans WinDbg, dans le menu Fichier , choisissez Attacher à un processus. Notez l’ID de processus pour MyApp. Supposons que l’ID de processus est 4816. Incrémentez le nombre de références de débogage pour le package qui contient MyApp.

.enablepackagedebug e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Dans WinDbg, dans la boîte de dialogue Attacher au processus , sélectionnez processus 4816, puis cliquez sur OK. WinDbg s’attache à MyApp.

Une fois le débogage terminé, décrémentez le nombre de références de débogage pour le package à l’aide de la commande .disablepackagedebug.

.disablepackagedebug e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Suspendre et reprendre manuellement votre application

Suivez ces étapes pour suspendre et reprendre manuellement votre application. Tout d’abord, incrémentez le nombre de références de débogage pour le package qui contient votre application.

.enablepackagedebug  e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Suspendez le package. Le gestionnaire de suspension de votre application est appelé, ce qui peut être utile pour le débogage.

.suspendpackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Une fois le débogage terminé, reprenez le package.

.resumepackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Enfin, décrémentez le nombre de références de débogage pour le package.

.disablepackagedebug e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Voir aussi