Examen d'un programme pendant le débogage
Pour examiner un programme pendant le débogage, le débogueur doit être en mesure d'accéder aux frames de pile managés et évaluer des expressions. 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.
Accès aux piles d'appels
La liste suivante décrit pas à pas comment un débogueur accède aux frames de pile managés. Le processus du programme débogué doit être arrêté pour l'accès aux frames de pile.
Le débogueur obtient un énumérateur pour les chaînes de pile. Le débogueur appelle la méthode ICorDebugThread::EnumerateChains pour le thread pour lequel des chaînes de pile doivent être accédées pour obtenir un objet ICorDebugChainEnum pour énumérer les chaînes de pile.
Le débogueur itère au sein des chaînes de pile en appelant la méthode ICorDebugChainEnum::Next.
Le débogueur obtient un énumérateur pour les frames de pile dans la chaîne en appelant la méthode ICorDebugChain::EnumerateFrames.
Le débogueur continue d'itérer au sein des frames de pile en appelant la méthode ICorDebugFrameEnum::Next.
Le débogueur obtient l'adresse IP facultativement. Le débogueur appelle la méthode ICorDebugILFrame::GetIP pour obtenir l'adresse IP relative au démarrage de la fonction pour le frame de pile.
Le débogueur obtient facultativement d'autres informations à propos du frame de pile. Par exemple, le débogueur peut appeler la méthode ICorDebugFrame::GetFunctionToken pour obtenir le jeton de métadonnées pour la fonction pour le code que le frame de pile exécute. Le débogueur peut appeler également la méthode ICorDebugCode::GetCode pour obtenir un objet qui représente le code que le frame de pile exécute.
Évaluation des expressions
Les expressions en code natif non managé peuvent être évaluées en utilisant les mêmes mécanismes qu'utilisent les débogueurs classiques.
En code managé, le débogueur peut évaluer une expression comme suit :
Analyser l'expression.
Appelez l'API de débogage pour accéder aux valeurs de variables dans l'expression et appeler les fonctions dans l'expression.
Le débogueur peut également effectuer les opérations suivantes :
Encapsuler l'expression dans une fonction globale et compiler la fonction.
Appeler l'API de débogage (Modifier & Continuer) pour ajouter la fonction globale.
Appeler l'API de débogage pour évaluer la fonction.
La liste suivante décrit pas à pas comment un débogueur évalue une expression. Dans ce scénario, l'expression est A + MyFunc() où il est supposé que A est dans un registre et le code débogué est du code natif managé.
Le débogueur obtient la valeur de A. Le débogueur appelle la méthode ICorDebugNativeFrame::GetLocalRegisterValue pour le frame de pile dans lequel l'expression sera évaluée.
Le débogueur crée un objet d'évaluation en appelant la méthode ICorDebugThread::CreateEval pour le thread dans lequel l'expression doit être évaluée.
Le débogueur calcule la valeur de MyFunc() en appelant la méthode ICorDebugEval::CallFunction.
Le débogueur évalue l'expression. Le débogueur applique le repli constant à l'expression en utilisant les valeurs obtenues dans les deux étapes précédentes.
Voir aussi
Concepts
Vue d'ensemble du débogage CLR