Partager via


Contrôle d'un programme pendant le débogage

Pendant le débogage, le contrôle d'un programme consiste à définir des points d'arrêt dans le code managé, à exécuter pas à pas le code managé et le code non managé et à gérer les exceptions de première chance et de seconde chance. Les sections suivantes décrivent comment un débogueur utilise l'API de débogage du Common Language Runtime (CLR) pour effectuer ces tâches.

Définition d'un point d'arrêt dans le code managé

La procédure suivie pour définir un point d'arrêt dans le code managé est décrite ci-dessous :

Exécution pas à pas du code managé et du code non managé

La procédure suivie par un débogueur pour exécuter pas à pas le code managé est décrite ci-dessous.

  1. Le débogueur crée une exécution pas à pas en fonction du thread dans lequel l'exécution pas à pas doit se produire. Le débogueur appelle la méthode ICorDebugThread::CreateStepper pour le thread faisant l'objet de l'exécution pas à pas. Le débogueur peut également appeler la méthode ICorDebugFrame::CreateStepper pour la trame pour laquelle l'exécution pas à pas doit se produire. Le processus est supposé être arrêté lors de la création de l'exécution pas à pas.

  2. Le débogueur exécute pas à pas le thread en appelant la méthode ICorDebugStepper::Step.

  3. Le débogueur poursuit l'exécution du processus en appelant la méthode ICorDebugController::Continue pour le processus du programme débogué en cours.

  4. L'API de débogage informe le débogueur que l'étape est terminée. L'API de débogage appelle la méthode ICorDebugManagedCallback::StepComplete pour l'objet que le débogueur avait enregistré avec le runtime.

  5. Le débogueur réexécute pas à pas le thread en appelant la méthode ICorDebugStepper::Step.

  6. Le débogueur poursuit l'exécution du processus en appelant la méthode ICorDebugController::Continue pour le processus du programme débogué en cours.

D'autres possibilités d'exécution pas à pas dans le code non managé sont décrites ci-dessous :

  • Le débogueur peut ignorer l'exécution pas à pas dans le code natif. Le débogueur appelle la méthode ICorDebugStepper::StepOut pour ignorer le code natif faisant l'objet d'une exécution pas à pas jusqu'à ce que la trame précédente soit réactivée. L'API de débogage appelle la méthode ICorDebugManagedCallback::StepComplete lorsque le code managé est entré à nouveau.

  • Le débogueur peut procéder à une exécution pas à pas dans la section suivante du code managé. Le débogueur appelle la méthode ICorDebugStepper::Step de manière à retourner le contrôle au débogueur lorsque la trame de code managé précédente est réentrée ou lorsque le code non managé appelle le nouveau code managé.

  • Le débogueur poursuit l'exécution du processus en appelant la méthode ICorDebugController::Continue pour le processus du programme débogué en cours.

  • L'API de débogage informe le débogueur de son exécution pas à pas dans le code non managé en appelant la méthode ICorDebugUnmanagedCallback::DebugEvent.

Gestion des exceptions

La procédure suivie pour gérer des exceptions de première chance et de seconde chance est décrite ci-dessous :

  1. Le CLR informe le débogueur qu'une exception de première chance s'est produite. L'API de débogage appelle la méthode ICorDebugManagedCallback::Exception sur l'interface ICorDebugManagedCallback que le débogueur a enregistrée avec le runtime.

  2. Le débogueur obtient des informations sur l'exception. Le débogueur appelle la méthode ICorDebugThread::GetCurrentException sur l'objet ICorDebugThread qui a été passé dans le rappel pour obtenir un objet d'exception (ICorDebugValue).

  3. Le débogueur obtient l'objet ICorDebugObjectValue pour l'exception. Le débogueur appelle la méthode QueryInterface pour obtenir l'objet ICorDebugObjectValue pour l'exception.

  4. Le débogueur obtient la classe de l'objet d'exception qui a été levé en appelant la méthode ICorDebugObjectValue::GetClass.

  5. Le débogueur décide d'ignorer l'exception et de continuer.

  6. Le CLR informe le débogueur qu'une exception de seconde chance s'est produite. L'API de débogage appelle la méthode ICorDebugManagedCallback::Exception et spécifie que l'exception est une exception de seconde chance.

  7. L'utilisateur décide que l'exception est sans importance. Le débogueur appelle la méthode ICorDebugThread::ClearCurrentException pour le thread du programme débogué en cours. Cette méthode efface l'exception pour l'empêcher d'être levée.

  8. Le débogueur poursuit l'exécution du processus en appelant la méthode ICorDebugController::Continue pour le processus du programme débogué en cours.

Voir aussi

Concepts

Vue d'ensemble du débogage CLR

Autres ressources

Débogage (Référence des API non managées)