Share via


Débogage d’un processus User-Mode à 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 -pProcessID
  • cdb -pnProcessName

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

Fenêtre de commande CDB

Si le débogueur débogue déjà un ou plusieurs processus, vous pouvez l’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 figé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 non invasive

Si vous souhaitez déboguer un processus en cours d’exécution et n’interférer que très peu dans son exécution, vous devez déboguer le processus de manière non invasive.

Invite de commandes

Pour déboguer de manière non invasive 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 -pProcessID

Ou, pour déboguer de manière non invasive un processus en cours d’exécution en spécifiant le nom du processus, utilisez la syntaxe suivante à la place.

cdb -pv -pnProcessName

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

Fenêtre de commande CDB

Si le débogueur est déjà actif, vous pouvez déboguer de manière non invasive 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ébogue déjà un ou plusieurs processus de manière invasive.

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 non invasif, le débogueur ne peut pas déboguer 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 son nom. Le débogueur peut également attacher automatiquement des 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 ne pourrait pas effectuer autrement. Par exemple, l’application cible peut être en mesure d’affecter des 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 Command-Line CDB.

Si le 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épart de l’application à l’aide de la commande .createdir (Définir le répertoire de processus créé) 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 (Debug Child Processes).

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 la façon d’attacher un débogueur dans cette situation, consultez Rattachement à l’application cible.