Breakpoints gør det muligt for brugere af afbryde udførelsen af et program på en bestemt placering midlertidigt. Breakpoints vises typisk i UI'et sammen med kildekoden. Når et breakpoint registreres under udførelsen af et program, afbrydes programmet midlertidigt og udløser fejlfindingsaktiviteten SUSPEND med BREAKPOINT som årsag.
Hvis din plugin skal kunne vise breakpoints i sin, kan du tilføje IBreakpointListener tilIBreakpointManager. IBreakpointManager har den centrale autorisation over alle breakpoints. Breakpoints tilføjes og fjernes vha. Breakpoint Manager, som herefter informerer eventuelle lyttere om breakpoint-aktiviteten. Breakpoint-funktioner kan aktiveres eller deaktiveres vha. Breakpoint Manager. Breakpoint Manager kan hentes fra DebugPlugin:
IBreakpointManager mgr = DebugPlugin.getDefault().getBreakpointManager();
Plugins, som definerer deres egne fejlfindingsmodeller og starter konfigurationer ofte, skal definere deres egne breakpoint-typer. Du kan implementere breakpoints til din specifikke fejlfindingsmodel ved at definere en klasse, som implementerer IBreakpoint.
Breakpoints implementeres vha. ressourcemarkeringer. Som tidligere nævnt gør ressourcemarkeringer det muligt at tilknytte meta-oplysninger om en ressource i form af navngivne attributter. Ved at implementere et breakpoint vha. markeringer kan fejlfindingsmodellen gøre brug af alle de eksisterende markeringsfunktioner, f.eks. persistens, søgning, tilføjelse, sletning og fremvisning i editorer.
Hvorfor er det vigtigt at kende til markeringer, når du bruger breakpoints? Når du opretter en breakpoint-type, skal du også angive en tilknyttet markeringstype. Hver udvidelse aforg.eclipse.debug.core.breakpoints skal ledsages af en udvidelse aforg.eclipse.core.resources.markers. Det demonstreres bedst ved at kigge på de udvidelser, der er defineret af Java-værktøjerne til Java-breakpoints.
<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>
Plugin-funktionen til fejlfinding definerer en særlig type markering, org.eclipse.debug.core.breakpointMarker. Når du definerer en breakpoint-markering til fejlfindingsfunktionen, skal du erklære den ved at bruge denne markering som supertype. Det gør det muligt for fejlfindingsmodellen af finde alle mulige breakpoints i en kildefil ved at søge efter undertyper til dens markering. I eksemplet ovenfor har javaExceptionBreakpointMarker en supertype, javaBreakpointMarker, hvis supertype er breakpointMarker. javaExceptionBreakpoint (defineret i breakpoint-udvidelsen) angiver javaExceptionBreakpointMarker som sin markering.
Hvad betyder det så alt sammen? Når fejlfindingskoden henter en kildekodefil, kan den søge efter alle de markeringer, hvis supertype er org.eclipse.debug.core.breakpointMarker. Når alle markeringer er fundet, kan udvidelsesregistreringsdatabasen bruges til at tilknytte markeringerne til deres tilhørende breakpoint-klasser vha. mapping. På den måde kan platformens fejlfindingskode generisk finde alle de breakpoint-typer, som er fastsat i en bestemt kildefil.