les points d'arrêt permettent aux utilisateurs d'interrompre l'exécution d'un programme à un emplacement donné. Ils apparaissent en général dans l'interface utilisateur avec le code source. Vous pouvez ajouter un IBreakpointListener à un IBreakpointManager afin d'être informé lors de l'ajout ou de la suppression de points d'arrêt. Lorsqu'un point d'arrêt est rencontré au cours de l'exécution d'un programme, ce dernier s'arrête et lance un événement de débogage SUSPEND avec le motif BREAKPOINT.
Les plug-in définissant leurs propres modèles de débogage et lançant des configurations ont souvent besoin de définir également leurs propres types de points d'arrêt. Vous pouvez implémenter des points d'arrêt pour un modèle de débogage donné en définissant une classe implémentant IBreakpoint.
L'implémentation des points d'arrêt s'effectue à l'aide de marqueurs de ressources. Ces derniers vous permettent d'associer des méta-informations sur une ressources sous la forme d'attributs. 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.
En quoi les marqueurs sont-ils importants en matière de points d'arrêt ? Lorsque vous créez un type de point d'arrêt, vous devez également indiquer 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. Les extensions définies par les outils Java pour les points d'arrêt Java offrent l'exemple le plus parlant.
<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, 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.
Quelles sont les conséquences ? Lorsque le code de débogage obtient une ressource de code source, il peut rechercher tous les marqueurs dont le supertype est org.eclipse.debug.core.breakpointMarker. Une fois tous les marqueurs localisés, il peut utiliser le registre du plug-in pour les mapper vers les classes associées du point d'arrêt. De cette façon, le code de débogage de la plateforme peut en général trouver tous les types de points d'arrêt définis dans un fichier source donné.