Points d'arrêt

Les points d'arrêt permettent aux utilisateurs de suspendre l'exécution d'un programme à un emplacement particulier. Les points d'arrêt sont affichés dans l'interface utilisateur avec le code source. Lorsqu'un programme rencontre un point d'arrêt lors de son exécution, il s'arrête et déclenche un événement de débogage SUSPENDRE avec comme raison POINT D'ARRET.

Si votre plug-in a besoin d'afficher les points d'arrêt dans son interface utilisateur, vous pouvez ajouter un IBreakpointListener au IBreakpointManager. Le IBreakpointManager fait autorité sur l'ensemble des points d'arrêt. Les points d'arrêt sont ajoutés et supprimés à l'aide du gestionnaire de point d'arrêt qui informe, à son tour, tous les modules d'écoute de l'activité relative aux points d'arrêt. Le fonctionnement des points d'arrêt peut être activé ou désactivé à l'aide du gestionnaire de point d'arrêt. Il est possible d'obtenir le gestionnaire de point d'arrêt à partir du DebugPlugin:

IBreakpointManager mgr = DebugPlugin.getDefault().getBreakpointManager();

Les Plug-in définissant leurs propres modèles de débogage et lançant des configurations ont souvent besoin de définir leurs propres types de point d'arrêt. Vous pouvez implémenter des points d'arrêt pour votre modèle de débogage particulier en définissant une classe qui implémente IBreakpoint.

L'implémentation des points d'arrêt s'effectue à l'aide de marqueurs de ressources. Le rappel de ces marqueurs de ressources vous permettent d'associer des méta-informations concernant une ressource sous la forme d'attributs nommés. En implémentant un point d'arrêt à l'aide de marqueurs, le modèle de débogage peut employer toutes les fonctions de marqueurs existantes, telles que persistance, recherche, ajout, suppression et affichage dans des éditeurs.

Pourquoi est-il important de connaître les marqueurs lors de l'utilisation de points d'arrêt ? Lorsque vous créez un type de point d'arrêt, vous devez également spécifier un type de marqueur associé. Chaque extension de org.eclipse.debug.core.breakpoints doit être accompagnée d'une extension de org.eclipse.core.resources.markers.Pour mieux comprendre, il suffit de regarder les extensions définies par les outils Java pour les points d'arrêt Java.

<extension id="javaBreakpointMarker" point="org.eclipse.core.resources.markers">
	<super type="org.eclipse.debug.core.breakpointMarker"/>
</extension>

<extension id="javaExceptionBreakpointMarker" point="org.eclipse.core.resources.markers">
	<super type="org.eclipse.jdt.debug.javaBreakpointMarker"/>
	<persistent value="true"/>
	<attribute name="org.eclipse.jdt.debug.core.caught"/>
	<attribute name="org.eclipse.jdt.debug.core.uncaught"/>
	<attribute name="org.eclipse.jdt.debug.core.checked"/>
</extension>
<extension point="org.eclipse.debug.core.breakpoints">
	<breakpoint
		id="javaExceptionBreakpoint"
		markerType="org.eclipse.jdt.debug.javaExceptionBreakpointMarker"
		class="org.eclipse.jdt.internal.debug.core.breakpoints.JavaExceptionBreakpoint">
	</breakpoint>
</extension>

Le plug-in de débogage définit un type spécial de marqueur nommé org.eclipse.debug.core.breakpointMarker. Lorsque vous définissez un marqueur de point d'arrêt pour votre débogueur, vous devez le déclarer comme supertype. Le modèle de débogage peut ainsi rechercher tous les points d'arrêt dans un fichier source pour les sous-types de son marqueur. Dans l'exemple ci-dessus, javaExceptionBreakpointMarker possède le supertype javaBreakpointMarker, dont le supertype est breakpointMarker. javaExceptionBreakpoint (défini dans l'extension du point d'arrêt) désigne javaExceptionBreakpointMarker comme son marqueur.

Que cela signifie-t-il ? Lorsque le code de débogage obtient un fichier de code source, il peut rechercher tous les marqueurs dont le supertype est org.eclipse.debug.core.breakpointMarker. Une fois tous les marqueurs trouvés, il peut ensuite utiliser le registre d'extension afin de mapper les marqueurs vers leurs classes de point d'arrêt associées. De cette manière, le code de débogage de la plateforme peut trouver de manière générique tous les types de point d'arrêt ayant été définis sur un fichier source particulier.