Contrôle de la cible
Pendant que vous déboguez une application cible en mode utilisateur ou un ordinateur cible en mode noyau, la cible peut être en cours d’exécution ou arrêtée.
Lorsque le débogueur se connecte à une cible en mode noyau, le débogueur quitte la cible en cours d’exécution, sauf si vous utilisez l’option de ligne de commande -b, le système cible a cessé de répondre (autrement dit, bloqué) ou le système cible est toujours arrêté en raison d’une action de débogage du noyau antérieure.
Lorsque le débogueur démarre ou se connecte à une cible en mode utilisateur, le débogueur arrête immédiatement la cible, sauf si vous utilisez l’option de ligne de commande -g . Pour plus d’informations, consultez le point d’arrêt initial.
Quand la cible est en cours d’exécution
Lorsque la cible est en cours d’exécution, la plupart des actions du débogueur ne sont pas disponibles.
Si vous souhaitez arrêter une cible en cours d’exécution, vous pouvez émettre une commande Break . Cette commande entraîne l’arrêt du débogueur dans la cible. Autrement dit, le débogueur arrête la cible et tout le contrôle est donné au débogueur. L’application peut ne pas s’arrêter immédiatement. Par exemple, si tous les threads exécutent actuellement du code système ou sont dans une opération d’attente, l’application s’interrompt uniquement une fois que le contrôle est retourné au code de l’application.
Si une cible en cours d’exécution rencontre une exception, si certains événements se produisent, si un point d’arrêt est atteint ou si l’application se ferme normalement, la cible se décompose dans le débogueur. Cette action arrête la cible et donne tout le contrôle au débogueur. Un message s’affiche dans la fenêtre Commande du débogueur et décrit l’erreur, l’événement ou le point d’arrêt.
Quand la cible est arrêtée
Pour démarrer ou contrôler l’exécution de la cible, vous pouvez effectuer les opérations suivantes :
Pour que l’application commence à s’exécuter, émettez la commande Go .
Pour parcourir l’application une seule instruction à la fois, utilisez les commandes Pas à pas ou Pas à pas. Si un appel de fonction se produit, Step Into entre la fonction et continue à parcourir chaque instruction. Pas à pas traite l’appel de fonction comme une seule étape. Lorsque le débogueur est en mode Assembly, le pas à pas se produit une seule instruction de machine à la fois. Lorsque le débogueur est en mode source, le pas à pas se produit une ligne source à la fois.
Pour terminer la fonction actuelle et arrêter lorsque le retour se produit, utilisez les commandes Step Out ou Trace et Watch . La commande Step Out se poursuit jusqu’à ce que la fonction actuelle se termine. Trace et Watch continue jusqu’à ce que la fonction actuelle se termine et affiche également un résumé des appels de la fonction. Toutefois, vous devez émettre la commande Trace et Espion sur la première instruction de la fonction en question.
Si une exception se produit, vous pouvez utiliser les commandes Go with Exception Handled et Go with Exception Not Handled pour reprendre l’exécution et contrôler l’état de l’exception. (Pour plus d’informations sur les exceptions, consultez Contrôle des exceptions et des événements.)
(WinDbg uniquement) Si vous sélectionnez une ligne dans la fenêtre Désassembler ou une fenêtre Source, puis utilisez la commande Exécuter au curseur , le programme s’exécute jusqu’à ce qu’il rencontre la ligne sélectionnée.
(Mode utilisateur uniquement) Pour fermer l’application cible et la redémarrer à partir du début, utilisez la commande Redémarrer . Vous pouvez utiliser cette commande uniquement avec un processus créé par le débogueur. Une fois le processus redémarré, il se décompose immédiatement dans le débogueur.
(WinDbg uniquement) Pour fermer l’application cible et effacer le débogueur, utilisez la commande Arrêter le débogage . Cette commande vous permet de commencer à déboguer une autre cible.
Formulaires de commande
La plupart des commandes pour démarrer ou contrôler l’exécution de la cible existent en tant que commandes de texte, commandes de menu, boutons de barre d’outils et touches de raccourci. En tant que commandes de texte de base, vous pouvez utiliser ces commandes dans CDB, KD ou WinDbg. (La forme de texte des commandes prend fréquemment en charge des options supplémentaires, telles que la modification de l’emplacement du compteur de programme ou l’exécution d’un nombre fixe d’instructions.) Vous pouvez utiliser les commandes de menu, les boutons de barre d’outils et les touches de raccourci dans WinDbg.
Vous pouvez utiliser les commandes dans les formulaires suivants.
Commande | Commande WinDbg | Touches de raccourci WinDbg | Effet |
---|---|---|---|
Déboguer | Exécuter jusqu’au curseur |
F7 CTRL + F10 |
(WinDbg uniquement) S’exécute jusqu’à atteindre la ligne que le curseur marque. |
|
Déboguer | Arrêter le débogage |
Maj + F5 |
Arrête tout débogage et ferme la cible. |
|
(CDB/KD uniquement) Ctrl+C |
Déboguer | Casser |
Ctrl + Arrêt |
L’exécution s’arrête et le débogueur s’arrête dans la cible. |
Déboguer | Redémarrer |
Ctrl + Maj + F5 |
(Mode utilisateur uniquement) Redémarre l’application cible. |
|
Déboguer | Aller |
F5 |
La cible s’exécute librement. |
|
Reprend l’exécution après un point d’arrêt conditionnel. |
|||
Déboguer | Exception gérée go |
Identique à g (Go), sauf que l’exception actuelle est traitée comme gérée. |
||
Déboguer | Aller à l’exception non gérée |
Identique à g (Go), sauf que l’exception actuelle est traitée comme non gérée. |
||
Déboguer | Pas à pas |
Maj + F11 |
La cible s’exécute jusqu’à ce que la fonction actuelle soit terminée. |
|
Déboguer | Enjamber |
F10 |
La cible exécute une instruction. Si cette instruction est un appel de fonction, cette fonction est exécutée en une seule étape. |
|
La cible s’exécute jusqu’à ce qu’elle atteigne l’adresse spécifiée. Toutes les étapes de cette fonction sont affichées (mais les étapes des fonctions appelées ne sont pas). |
|||
La cible s’exécute jusqu’à l’instruction d’appel suivante. Si l’instruction actuelle est une instruction d’appel, cet appel est exécuté complètement et l’exécution se poursuit jusqu’à l’appel suivant. |
|||
La cible s’exécute jusqu’à ce qu’elle atteigne une instruction d’appel ou une instruction de retour. |
|||
La cible s’exécute jusqu’à ce qu’elle atteigne un type d’instruction de branchement, y compris des branches conditionnelles ou conditionnelles, des appels, des retours et des appels système. |
|||
La cible s’exécute jusqu’à ce qu’elle atteigne une instruction de retour . |
|||
Déboguer | Pas à pas dans |
F11 F8 |
La cible exécute une instruction. Si cette instruction est un appel de fonction, le débogueur effectue une trace dans cet appel. |
|
La cible s’exécute jusqu’à ce qu’elle atteigne l’adresse spécifiée. Toutes les étapes de cette fonction et appelées fonctions sont affichées. |
|||
(Tous les modes, à l’exception du mode noyau, uniquement sur les systèmes x86) La cible s’exécute jusqu’à ce qu’elle atteigne l’instruction de branche suivante. |
|||
La cible s’exécute jusqu’à l’instruction d’appel suivante. Si l’instruction actuelle est une instruction d’appel, l’instruction est tracée jusqu’à ce qu’un nouvel appel soit atteint. |
|||
La cible s’exécute jusqu’à ce qu’elle atteigne une instruction d’appel ou une instruction de retour . Si l’instruction actuelle est une instruction d’appel ou une instruction de retour , l’instruction est tracée jusqu’à ce qu’un nouvel appel ou retour soit atteint. |
|||
La cible s’exécute jusqu’à ce qu’elle atteigne un type d’instruction de branchement, y compris des branches conditionnelles ou conditionnelles, des appels, des retours et des appels système. Si l’instruction actuelle est une instruction de branchement, l’instruction est tracée jusqu’à ce qu’une nouvelle instruction de branchement soit atteinte. |
|||
La cible s’exécute jusqu’à ce qu’elle atteigne une instruction de retour . Si l’instruction actuelle est une instruction de retour , l’instruction est tracée jusqu’à ce qu’un nouveau retour soit atteint. |
|||
La cible s’exécute jusqu’à l’achèvement de l’ensemble de la fonction spécifiée. Les statistiques sont ensuite affichées. |
Pour plus d’informations sur le redémarrage de l’ordinateur cible, consultez Blocage et redémarrage de l’ordinateur cible.
Options de ligne de commande
Si vous ne souhaitez pas que l’application s’arrête immédiatement au démarrage ou au chargement, utilisez CDB ou WinDbg avec l’option de ligne de commande -g . Pour plus d’informations sur cette situation, consultez le point d’arrêt initial.
CDB et WinDbg prennent également en charge l’option de ligne de commande -G. Cette option entraîne la fin de la session de débogage si l’application se termine correctement.
La commande suivante tente d’exécuter l’application du début à la fin, et l’invite du débogueur s’affiche uniquement si une erreur se produit.
cdb -g -G ApplicationName
Vous pouvez utiliser l’option de ligne de commande -pt pour définir le délai d’arrêt. Il existe certains problèmes qui peuvent rendre la cible incapable de communiquer avec le débogueur. Si une commande d’arrêt est émise et que le débogueur ne peut pas se décomposer dans la cible après cette période, le débogueur affiche un message « Délai d’arrêt ».
À ce stade, le débogueur cesse d’essayer de se décomposer dans la cible. Au lieu de cela, le débogueur suspend la cible et vous permet d’examiner (mais pas contrôler) l’application cible.
Le délai d’attente par défaut est de 30 secondes.