Partager via


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

Vous pouvez utiliser CDB 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

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 CDB. Utilisez l’une des commandes suivantes :

  • cdb -p ProcessID
  • cdb -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 CDB.

Fenêtre de commande CDB

Si le débogueur débogueur débogue déjà un ou plusieurs processus, vous pouvez attacher à un processus en cours d’exécution à l’aide de la commande .attach (Attacher au processus).

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 s’attache 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.

Invite de commandes

Pour déboguer un processus en cours d’exécution à partir de la ligne de commande CDB, spécifiez l’option -pv , l’option -p et l’ID de processus, dans la syntaxe suivante.

cdb -pv -p ProcessID

Ou, pour déboguer de manière nonvasive un processus en cours d’exécution en spécifiant le nom du processus, utilisez plutôt la syntaxe suivante.

cdb -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 CDB.

Fenêtre de commande CDB

Si le débogueur est déjà actif, vous pouvez déboguer de manière nonvasive un processus en cours d’exécution en entrant la commande .attach -v (Attacher au processus).

Vous pouvez utiliser la commande .attach si le débogueur débogueur débogue déjà un ou plusieurs processus invasifs.

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

CDB 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.

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

cdb [-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 CDB.

Si le débogueur débogueur débogue déjà un ou plusieurs processus, vous pouvez créer un processus en entrant la commande .create (Créer un processus).

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.