Delen via


Foutopsporingssessie en uitvoeringsmodel

De engine voor foutopsporingsprogramma's kan tegelijkertijd fouten opsporen in meerdere doelen. Er wordt een foutopsporingssessie gestart wanneer de engine een doelwit acquireert en doorgaat totdat alle doelwitten zijn opgeheven. Een foutopsporingssessie is niet toegankelijk terwijl de doelwitten worden uitgevoerd en toegankelijk wanneer het huidige doelwit wordt onderbroken. De engine kan alleen worden gebruikt om doelen te onderzoeken en te manipuleren terwijl de sessie toegankelijk is.

De hoofdlus van een foutopsporingsprogramma bestaat doorgaans uit het instellen van de uitvoeringsstatus, het aanroepen van de methode WaitForEvent en het verwerken van de gegenereerde gebeurtenissen. Wanneer WaitForEvent wordt aangeroepen, wordt de sessie ontoegankelijk.

Wanneer een gebeurtenis plaatsvindt in een doel, onderbreekt de engine alle doelen en wordt de sessie toegankelijk. De engine meldt vervolgens de callbacks van de gebeurtenis en volgt de regels voor het gebeurtenisfilter. De event callbacks en gebeurtenisfilters bepalen hoe de uitvoering in het geselecteerde doel moet verlopen. Als ze vaststellen dat de engine in het foutopsporingsprogramma moet inbreken, retourneert de Methode WaitForEvent en blijft de sessie toegankelijk; anders hervat de engine de uitvoering van het doel op de manier die wordt bepaald door de callbacks van gebeurtenissen en gebeurtenisfilters en wordt de sessie weer ontoegankelijk.

Voor de duur van de WaitForEvent-aanroep, met name tijdens het op de hoogte stellen van de gebeurtenis-callbacks en het verwerken van de filterregels, bevindt de engine zich in een toestand die wordt aangeduid als "binnen een wacht". In deze staat kan WaitForEvent niet worden aangeroepen (het kan niet opnieuw worden aangeroepen).

Er zijn twee stappen betrokken bij het initiëren van de uitvoering in een doel: de uitvoeringsstatus instellen en vervolgens WaitForEvent aanroepen. De uitvoeringsstatus kan worden ingesteld met behulp van de methode SetExecutionStatus of door een foutopsporingsprogramma-opdracht uit te voeren waarmee de uitvoeringsstatus wordt ingesteld, bijvoorbeeld g(Go) en p (stap).

Als een reeks opdrachten voor foutopsporingsprogramma's samen worden uitgevoerd, bijvoorbeeld 'g ; ? @$ip": een impliciete wachttijd vindt plaats na een opdracht waarvoor uitvoering in het doel is vereist als deze opdracht niet de laatste opdracht in de reeks is. Een impliciete wachttijd kan niet optreden wanneer de foutopsporingsengine zich in de status "tijdens een wacht" bevindt; in dit geval stopt de uitvoering van de opdrachten en wordt de huidige opdracht, degene die geprobeerd heeft de impliciete wachttijd te veroorzaken, geïnterpreteerd als een indicatie van hoe de uitvoering in het doel moet worden voortgezet. De rest van de opdrachten wordt verwijderd.

Notitie Bij het bepalen of de sessie toegankelijk of niet toegankelijk is, wordt beperkte uitvoering van een doel (bijvoorbeeld stap) beschouwd als uitvoering door de engine. Wanneer de beperkte uitvoering is voltooid, wordt de sessie toegankelijk.

Hostengine

Wanneer u op afstand foutopsporing uitvoert, kunt u meerdere instanties van de debugger-engine gebruiken. Precies één van deze exemplaren onderhoudt de foutopsporingssessie; dit exemplaar wordt de hostengine genoemd.

Alle foutopsporingsprogrammabewerkingen zijn relatief ten opzichte van de hostengine, bijvoorbeeld het laden van symbolen en het laden van extensies.