Débogage de session et modèle d’exécution
Le moteur de débogueur peut déboguer plusieurs cibles simultanément. Une session de débogage commence lorsque le moteur acquiert une cible et se poursuit jusqu’à ce que toutes les cibles aient été ignorées. Une session de débogage est inaccessible pendant l’exécution des cibles et accessible lorsque la cible actuelle est suspendue. Le moteur ne peut être utilisé que pour examiner et manipuler des cibles lorsque la session est accessible.
La boucle main d’un débogueur consiste généralement à définir le status d’exécution, à appeler la méthode WaitForEvent et à gérer les événements générés. Lorsque WaitForEvent est appelé, la session devient inaccessible.
Lorsqu’un événement se produit dans une cible, le moteur suspend toutes les cibles et la session devient accessible. Le moteur avertit ensuite les rappels d’événements de l’événement et suit les règles de filtre d’événements. Les rappels d’événements et les filtres d’événements déterminent la façon dont l’exécution dans la cible doit se poursuivre. S’ils déterminent que le moteur doit s’introduire dans le débogueur, la méthode WaitForEvent retourne et la session reste accessible ; sinon, le moteur reprend l’exécution de la cible de la manière déterminée par les rappels d’événements et les filtres d’événements, et la session redevient inaccessible.
Pendant la durée de l’appel WaitForEvent , en particulier lors de la notification des rappels d’événements et du traitement des règles de filtre, le moteur est dans un état appelé « dans une attente ». Dans cet état, WaitForEvent ne peut pas être appelé (il n’est pas réentrant).
Il existe deux étapes pour lancer l’exécution dans une cible : définir la status d’exécution, puis appeler WaitForEvent. Le status d’exécution peut être défini à l’aide de la méthode SetExecutionStatus ou en exécutant une commande de débogueur qui définit l’exécution status- par exemple, g(Go) et p (Step).
Si une séquence de commandes de débogueur est exécutée ensemble, par exemple, « g ; ? » @$ip »: une attente implicite se produit après toute commande qui nécessite une exécution dans la cible si cette commande n’est pas la dernière commande de la séquence. Une attente implicite ne peut pas se produire lorsque le moteur du débogueur est à l’état « à l’intérieur d’une attente » ; dans ce cas, l’exécution des commandes s’arrête et la commande actuelle, celle qui a tenté de provoquer l’attente implicite, sera interprétée comme une indication de la façon dont l’exécution dans la cible doit se poursuivre. Les autres commandes seront ignorées.
Note Lorsque vous déterminez si la session est accessible ou inaccessible, l’exécution limitée d’une cible (par exemple, l’exécution pas à pas) est considérée comme une exécution par le moteur. Une fois l’exécution limitée terminée, la session devient accessible.
Moteur hôte
Lors du débogage à distance, vous pouvez utiliser plusieurs instances du moteur de débogueur. Exactement une de ces instances gère la session de débogage ; cette instance est appelée moteur hôte.
Toutes les opérations de débogueur sont relatives au moteur hôte, par exemple, le chargement de symboles et le chargement de l’extension.