Débogage de plusieurs cibles

Vous pouvez déboguer plusieurs fichiers de vidage ou applications en mode utilisateur en direct en même temps. Chaque cible contient un ou plusieurs processus, et chaque processus contient un ou plusieurs threads.

Ces cibles sont également regroupées en systèmes. Les systèmes sont des ensembles de cibles regroupées pour faciliter l’identification et la manipulation. Les systèmes sont définis comme suit :

  • Chaque fichier de vidage en mode noyau ou en mode utilisateur est un système distinct.

  • Lorsque vous déboguez des applications en mode utilisateur en direct sur différents ordinateurs (à l’aide d’un serveur de processus, tel que Dbgsrv), chaque application est un système distinct.

  • Lorsque vous déboguez des applications en mode utilisateur en direct sur l’ordinateur local, les applications sont combinées en un seul système.

Le système actuel ou actif est le système que vous déboguez actuellement.

Acquisition de plusieurs cibles

La première cible est acquise de la manière habituelle.

Vous pouvez déboguer d’autres applications en mode utilisateur en direct à l’aide de la commande .attach (Attacher au processus) ou .create (Créer un processus), suivie de la commande g (Go).

Vous pouvez déboguer des fichiers de vidage supplémentaires à l’aide de la commande .opendump (Fichier de vidage open), suivie de la commande g (Go). Vous pouvez également ouvrir plusieurs fichiers de vidage lorsque le débogueur est démarré. Pour ouvrir plusieurs fichiers de vidage, incluez plusieurs commutateurs -z dans la commande, chacun suivi d’un nom de fichier différent.

Vous pouvez utiliser les commandes précédentes même si les processus se trouvent sur différents systèmes. Vous devez démarrer un serveur de processus sur chaque système, puis utiliser le paramètre -premote avec .attach ou .create pour identifier le serveur de processus approprié. Si vous utilisez à nouveau la commande .attach ou .create sans spécifier le paramètre -premote, le débogueur s’attache ou crée un processus sur le système actuel.

Manipulation de systèmes et de cibles

Lorsque le débogage commence, le système actuel est celui auquel le débogueur est attaché le plus récemment. Si une exception se produit, le système actuel bascule vers le système sur lequel cette exception s’est produite.

Pour fermer une cible et continuer à déboguer les autres cibles, utilisez la commande .kill (Kill Process). Vous pouvez utiliser la commande .detach (Détacher du processus) ou le débogage de WinDbg | Détacher la commande de menu Débogueur à la place. Ces commandes détachent le débogueur de la cible, mais laissent la cible en cours d’exécution.

Pour contrôler le débogage de plusieurs systèmes, vous pouvez utiliser les méthodes suivantes :

En utilisant ces commandes pour sélectionner le système actuel et en utilisant les commandes standard pour sélectionner le processus et le thread actuels, vous pouvez déterminer le contexte des commandes qui affichent la mémoire et les registres.

Toutefois, vous ne pouvez pas séparer l’exécution de ces processus. La commande g (Go) provoque toujours l’exécution de toutes les cibles.

Notez qu’il existe des complications lorsque vous déboguez des cibles actives et des cibles de vidage ensemble, car les commandes se comportent différemment pour chaque type de débogage. Par exemple, si vous utilisez la commande g (Go) lorsque le système actuel est un fichier de vidage, le débogueur commence à s’exécuter, mais vous ne pouvez pas revenir au débogueur, car la commande d’arrêt n’est pas reconnue comme valide pour le débogage de fichier de vidage.

Exemple

Pour utiliser trois fichiers de vidage en même temps, vous pouvez utiliser l’option -z pour les charger au démarrage de WinDbg.

windbg -z c:\notepad.dmp -z c:\paint.dmp -z c:\calc.dmp

Pour plus d’informations, consultez Options de ligne de commande WinDbg. Vous pouvez également utiliser les commandes .opendump et g (Go) pour charger des fichiers de vidage supplémentaires dans le débogueur.

Utiliser | | (État du système) commande pour confirmer que les trois systèmes sont présents.

||0:0:007> ||
.  0 User mini dump: c:\notepad.dmp
   1 User mini dump: C:\paint.dmp
   2 User mini dump: c:\calc.dmp

Utilisez la commande g (Go) pour terminer le chargement des fichiers de vidage.

||0:0:007> g

************* Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*
Symbol search path is: srv*
Executable search path is: 
Windows 10 Version 15063 MP (4 procs) Free x64
Product: WinNt, suite: SingleUserTS
15063.0.amd64fre.rs2_release.170317-1834
Machine Name:
Debug session time: Fri Jun  9 15:52:04.000 2017 (UTC - 7:00)
System Uptime: not available
Process Uptime: 0 days 0:03:44.000
...............................................................
This dump file has a breakpoint exception stored in it.
The stored exception information can be accessed via .ecxr.
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc              int     3

Utilisez ensuite | |commande s (Définir le système actuel) pour définir le système actuel sur system 1, puis afficher le système actuel.

||1:1:017> ||1s
||1:1:017> ||
   0 User mini dump: c:\notepad.dmp
.  1 User mini dump: c:\paint.dmp
   2 User mini dump: c:\calc.dmp

Vous pouvez utiliser la commande .detach lorsque vous avez terminé d’examiner le fichier de vidage actuel.

||1:1:017> .detach
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc              int     3
Detached
||0:0:007> ||
.  0 User mini dump: c:\notepad.dmp
   2 User mini dump: c:\calc.dmp

Ressources

Pour plus d’informations sur le débogage, consultez les ressources suivantes.

Livres

  • Advanced Windows Debugging par Mario Hewardt et Daniel Pravat

  • À l’intérieur de Windows Débogage : Guide pratique pour le débogage et le suivi des stratégies dans Windows par Tarik Soulami

  • Windows Internals by Pavel Yosifovich, Alex Ionescu, Mark E. Russinovich et David A. Salomon

Vidéo

The Defrag Tools Show WinDbg Episodes 13-29: </shows/defrag-tools/>