Débogage d’un processus en mode utilisateur à l’aide de WinDbg Classic

Vous pouvez utiliser WinDbg pour attacher à un processus en cours d’exécution ou pour générer et attacher à un nouveau processus.

Attachement à un processus en cours d’exécution

Il existe plusieurs façons d’utiliser WinDbg pour attacher un processus en cours d’exécution. Quelle que soit la méthode que vous choisissez, vous aurez besoin de l’ID de processus ou du nom du processus. L’ID de processus est un nombre attribué par le système d’exploitation. Pour plus d’informations sur la façon de déterminer l’ID de processus et le nom du processus, consultez Recherche de l’ID de processus.

WinDbg Menu

Lorsque WinDbg est en mode dormant, vous pouvez vous attacher à un processus en cours d’exécution en choisissant Attacher à un processus à partir du menu Fichier ou en appuyant sur F6.

Dans la boîte de dialogue Attacher au processus , sélectionnez le processus que vous souhaitez déboguer, puis sélectionnez OK.

Invite de commandes

Dans une fenêtre d’invite de commandes, vous pouvez vous attacher à un processus en cours d’exécution lorsque vous lancez WinDbg. Utilisez l’une des commandes suivantes :

  • windbg -p ProcessID
  • windbg -pn ProcessName

ProcessID est l’ID de processus d’un processus en cours d’exécution ou ProcessName est le nom d’un processus en cours d’exécution.

Pour plus d’informations sur la syntaxe de ligne de commande, consultez Options de ligne de commande WinDbg.

Fenêtre de commande du débogueur

Si WinDbg débogue déjà un ou plusieurs processus, vous pouvez vous attacher à un processus en cours d’exécution à l’aide de la commande .attach (Attacher au processus) dans la fenêtre Commande du débogueur.

Le débogueur démarre toujours plusieurs processus cibles simultanément, sauf si certains de leurs threads sont gelés ou suspendus.

Si la commande .attach réussit, le débogueur se joint au processus spécifié la prochaine fois que le débogueur émet une commande d’exécution. Si vous utilisez cette commande plusieurs fois dans une ligne, l’exécution doit être demandée par le débogueur autant de fois que vous utilisez cette commande.

Attachement à un processus en cours d’exécution de manière nonvasive

Si vous souhaitez déboguer un processus en cours d’exécution et interférer uniquement au minimum dans son exécution, vous devez déboguer le processus de manière nonvasive.

WinDbg Menu

Lorsque WinDbg est en mode dormant, vous pouvez déboguer de manière nonvasive un processus en cours d’exécution en choisissant Attacher à un processus à partir du menu Fichier ou en appuyant sur F6.

Lorsque la boîte de dialogue Attacher au processus s’affiche, cochez la case Non-vasive . Sélectionnez ensuite la ligne qui contient l’ID de processus et le nom souhaités. (Vous pouvez également entrer l’ID de processus dans le Zone ID de processus.) Enfin, sélectionnez OK.

Invite de commandes

Dans une fenêtre d’invite de commandes, vous pouvez vous attacher à un processus en cours d’exécution de manière nonvasive lorsque vous lancez WinDbg. Utilisez l’une des commandes suivantes :

  • windbg -pv -p ProcessID
  • windbg -pv -pn ProcessName

Il existe plusieurs autres options de ligne de commande utiles. Pour plus d’informations sur la syntaxe de ligne de commande, consultez Options de ligne de commande WinDbg.

Fenêtre de commande du débogueur

Si le débogueur est déjà actif, vous pouvez déboguer de manière nonvasive un processus en cours d’exécution à l’aide de la commande .attach -v (Attacher au processus) dans la fenêtre Commande du débogueur.

Vous pouvez utiliser la commande .attach si le débogueur débogueur débogue déjà un ou plusieurs processus invasifs. Vous ne pouvez pas utiliser cette commande si WinDbg est dormant.

Si la commande .attach -v réussit, le débogueur débogue le processus spécifié la prochaine fois que le débogueur émet une commande d’exécution. Étant donné que l’exécution n’est pas autorisée pendant le débogage nonvasif, le débogueur ne peut pas déboguer de manière nonvasive plusieurs processus à la fois. Cette restriction signifie également que l’utilisation de la commande .attach -v peut rendre une session de débogage invasive existante moins utile.

Génération d’un nouveau processus

WinDbg peut démarrer une application en mode utilisateur, puis déboguer l’application. L’application est spécifiée par nom. Le débogueur peut également s’attacher automatiquement aux processus enfants (processus supplémentaires démarrés par le processus cible d’origine).

Les processus créés par le débogueur (également appelés processus générés) se comportent légèrement différemment des processus que le débogueur ne crée pas.

Au lieu d’utiliser l’API de tas standard, les processus créés par le débogueur utilisent un tas de débogage spécial. Vous pouvez forcer un processus généré à utiliser le tas standard au lieu du tas de débogage à l’aide de la variable d’environnement _NO_DEBUG_HEAP ou de l’option de ligne de commande -hd.

En outre, étant donné que l’application cible est un processus enfant du débogueur, elle hérite des autorisations du débogueur. Cette autorisation peut permettre à l’application cible d’effectuer certaines actions qu’elle n’a pas pu effectuer dans le cas contraire. Par exemple, l’application cible peut être en mesure d’affecter les processus protégés.

WinDbg Menu

Lorsque WinDbg est en mode dormant, vous pouvez générer un nouveau processus en choisissant Ouvrir l’exécutable dans le menu Fichier ou en appuyant sur Ctrl+E.

Lorsque la boîte de dialogue Ouvrir l’exécutable s’affiche, entrez le chemin complet du fichier exécutable dans la zone Nom de fichier ou utilisez la liste Rechercher pour sélectionner le chemin d’accès et le nom de fichier souhaités.

Si vous souhaitez utiliser des paramètres de ligne de commande avec l’application en mode utilisateur, entrez-les dans la zone Arguments . Si vous souhaitez modifier le répertoire de départ à partir du répertoire par défaut, entrez le chemin du répertoire dans la zone Démarrer le répertoire. Si vous souhaitez que WinDbg s’attache aux processus enfants, activez également la case à cocher Déboguer les processus enfants.

Après avoir effectué vos sélections, sélectionnez Ouvrir.

Invite de commandes

Dans une fenêtre d’invite de commandes, vous pouvez générer un nouveau processus lorsque vous lancez WinDbg. Utilisez la commande suivante :

windbg [-o] ProgramName [Arguments]

L’option -o entraîne l’attachement du débogueur aux processus enfants. Il existe plusieurs autres options de ligne de commande utiles. Pour plus d’informations sur la syntaxe de ligne de commande, consultez Options de ligne de commande WinDbg.

Fenêtre de commande du débogueur

Si WinDbg débogue déjà un ou plusieurs processus, vous pouvez créer un processus à l’aide de la commande .create (Créer un processus) dans la fenêtre Commande du débogueur.

Le débogueur démarre toujours plusieurs processus cibles simultanément, sauf si certains de leurs threads sont figés ou suspendus.

Si la commande .create réussit, le débogueur crée le processus spécifié la prochaine fois que le débogueur émet une commande d’exécution. Si vous utilisez cette commande plusieurs fois dans une ligne, l’exécution doit être demandée par le débogueur autant de fois que vous utilisez cette commande.

Vous pouvez contrôler le répertoire de démarrage de l’application à l’aide de la commande .createdir (Set Created Process Directory) avant .create. Vous pouvez utiliser la commande .createdir -I ou l’option de ligne de commande -noinh pour contrôler si l’application cible hérite des handles du débogueur.

Vous pouvez activer ou désactiver le débogage des processus enfants à l’aide de la commande .childdbg (Processus enfants de débogage).

Rattachement à un processus

Si le débogueur cesse de répondre ou se bloque, vous pouvez attacher un nouveau débogueur au processus cible. Pour plus d’informations sur l’attachement d’un débogueur dans ce cas, consultez Reattaching à l’application cible.