Avbruddspunkter

Med avbruddspunkter kan brukere deaktivere utføringen av et program som har en bestemt plassering. Avbruddspunkter vises vanligvis i brukergrensesnittet sammen med kildekoden. Hvis det blir oppdaget et avbruddspunkt under utføringen av et program, deaktiverer og utløser programmet en SUSPEND-feilsøkingshendelse med BREAKPOINT som årsak.

Hvis plugin-modulen skal vise avbruddspunkter i brukergrensesnittet, kan du legge til IBreakpointListener i IBreakpointManager. IBreakpointManager har den sentrale styringen over alle avbruddspunkter. Avbruddspunkter legges til og fjernes ved hjelp av avbruddspunktstyreren, som informerer eventuelle lyttere om avbruddspunktaktiviteten. Avbruddspunkter kan aktiveres eller deaktiveres ved hjelp av avbruddspunktstyreren. Avbruddspunktstyreren kan hentes fra DebugPlugin:

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

Det er ofte hensiktsmessig å definere egne avbruddspunkttyper for plugin-moduler som definerer sine egne feilsøkingsmodeller og oppstartskonfigurasjoner. Du kan implementere avbruddspunkter for en bestemt feilsøkingsmodell ved på definere en klasse som implementerer IBreakpoint.

Avbruddspunkter implementeres ved hjelp av ressursmerker. Husk at med ressursmerker kan du tilknytte metainformasjon om en ressurs i form av navngitte attributter. Ved å implementere et avbruddspunkt ved hjelp av merker, kan feilsøkingsmodellen bruke hele den eksisterende merkefunksjonen, for eksempel persistens, søking, tilføyelse, sletting og visning i redigeringsprogrammer.

Hvorfor er det viktig å kjenne til merker når du bruker avbruddspunkter? Når du oppretter en avbruddspunkttype, må du også angi en tilknyttet merketype.Hver utvidelse av org.eclipse.debug.core.breakpoints må ha en tilsvarende utvidelse av org.eclipse.core.resources.markers.  Dette illustreres best ved å se på utvidelser som er definert av Java-verktøy for Java-avbruddspunkter.

<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-modulen for feilsøking definerer en bestemt merketype, org.eclipse.debug.core.breakpointMarker. Når du definerer avbruddspunktmerker for feilsøking, deklarerer du det ved å bruke dette merke som en supertype. Dermed kan feilsøkingsmodellen finne alle mulige avbruddspunkter i kildefilen ved å søke etter subtyper for merket. I eksempelet ovenfor har javaExceptionBreakpointMarker en supertype, javaBreakpointMarker, som igjen har en supertype, breakpointMarker. javaExceptionBreakpoint (definert i avbruddspunktutvidelsen) angir javaExceptionBreakpointMarker som sitt merke.

Hva betyr alt dette? Når feilsøkingskoden henter en kildekodefil, kan den søke etter alle merker med supertypen org.eclipse.debug.core.breakpointMarker. Når alle merkene er funnet, brukes utvidelsesregisteret til å knytte merkene til de tilknyttede avbruddspunktklassene. På denne måten kan plattformens feilsøkingskode stort sett finne alle avbruddspunkttyper som er definert i en bestemt kildefil.