Med brytpunkter kan användare stoppa körningen av ett program på en viss plats. Brytpunkter visas vanligtvis i användargränssnittet tillsammans med källkoden. När en brytpunkt påträffas under en programkörning, stoppas programmet och felsökningshändelsen SUSPEND triggas med BREAKPOINT som orsak.
Om ditt insticksprogram behöver visa brytpunkter i sitt användargränssnitt, kan du lägga till en IBreakpointListener i IBreakpointManager. IBreakpointManager är en central styrmodul för alla brytpunkter. Brytpunkter läggs till och tas bort med hjälp av brytpunktshanteraren, som i sin tur informerar eventuella lyssnare om brytpunktsaktivitet. Funktionen hos brytpunkter kan aktiveras eller avaktiveras via brytpunktshanteraren. Brytpunktshanteraren kan erhållas från DebugPlugin:
IBreakpointManager mgr = DebugPlugin.getDefault().getBreakpointManager();
I insticksprogram där egna felsökningsmodeller och startkonfigurationer definieras måste i de flesta fall även egna brytpunktstyper definieras. Du kan implementera brytpunkter för din speciella felsökningsmodell genom att definiera en klass som implementerar IBreakpoint.
Brytpunkter implementeras med hjälp av resursmarkörer. Kom ihåg att via resursmarkörer kan du associera metainformation om en resurs i form av namngivna attribut. Genom att implementera en brytpunkt med hjälp av markörer, kan alla befintliga markörfunktioner som t.ex. beständighet, sökning, tillägg, borttagning och visning i redigerare användas i felsökningsmodellen.
Varför är det så viktigt att ha kunskap om markörer när man använder brytpunkter? När du skapar en brytpunkt måste du även ange en associerad markörtyp. Varje tillägg för org.eclipse.debug.core.breakpoints ska kompletteras med ett tillägg för org.eclipse.core.resources.markers. Detta demonstreras bäst genom att du tittar på de tillägg som definierats av Java-verktygen för Java-brytpunkter.
<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>
I insticksprogrammet för felsökning definieras en speciell markörtyp, org.eclipse.debug.core.breakpointMarker. När du definierar en brytpunktsmarkör för din felsökare, ska du deklarera den med hjälp av denna markör som supertyp. På så sätt kan felsökningsmodellen hitta alla möjliga brytpunkter i en källfil genom att söka efter subtyper av dess markör. I exemplet ovan har javaExceptionBreakpointMarker en supertyp, javaBreakpointMarker, vars supertyp är breakpointMarker. javaExceptionBreakpoint (definieras i brytpunktstillägget) tilldelar javaExceptionBreakpointMarker som sin markör.
Vad betyder allt detta? När felsökningskoden får en källkodsfil kan sökning ske efter alla markörer vars supertyp är org.eclipse.debug.core.breakpointMarker. När alla markörer hittats kan tilläggsregistret användas till att avbilda markörerna till associerade brytpunktsklasser. På så sätt kan plattformens felsökningskod hitta alla brytpunktstyper som angetts för en viss källfil.