I punti di interruzione consentono di sospendere l'esecuzione di un programma in una determinata posizione. Vengono generalmente visualizzati nella UI insieme al codice di origine. Quando viene rilevato un punto di interruzione durante l'esecuzione di un programma, il programma viene sospeso e viene attivato un evento di debug SUSPEND con BREAKPOINT indicato come causa.
Se il plugin deve mostrare i punti di interruzione nell'UI, è possibile aggiungere un IBreakpointListener al IBreakpointManager. Il IBreakpointManager è l'autorità centrale di tutti i punti di interruzione. I punti di interruzione vengono aggiunti e rimossi utilizzando il gestore dei punti di interruzione, che a sua volta informa i listener sull'attivitù dei punti. L'operazione dei punti di interruzione può essere abilitata o disabilitata utilizzando il gestore dei punti di interruzione. Il gestore dei punti di interruzione può essere ottenuto da DebugPlugin:
IBreakpointManager mgr = DebugPlugin.getDefault().getBreakpointManager();
I plugin che definiscono i propri modelli di debug e configurazioni di avvio spesso devono definire tipi di punti di interruzione personalizzati. È possibile implementare i punti di interruzione per un determinato modello di debug definendo una classe che implementa IBreakpoint.
I punti di interruzione vengono implementati utilizzando gli indicatori di risorse. È importante ricordare che gli indicatori di risorse consentono di associare meta-informazioni su una risorsa sotto forma di attributi denominati. Implementando un punto di interruzione mediante gli indicatori, il modello di debug può fare uso di tutte le funzioni degli indicatori esistenti, quali la persistenza, la ricerca, l'aggiunta, l'eliminazione e la visualizzazione negli editor.
È importante quindi avere informazioni sull'indicatore in uso quando si utilizzano i punti di interruzione. Quando si crea un tipo di punto di interruzione, è necessario anche specificare un tipo di indicatore associato. Ogni estensione di org.eclipse.debug.core.breakpoints deve essere accompagnata da un'estensione di org.eclipse.core.resources.markers. La dimostrazione migliore di questo fenomeno si ottiene esaminando le estensioni definite dalla strumentazione Java per i punti di interruzione 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>
Il plugin di debug definisce un tipo speciale di indicatore, org.eclipse.debug.core.breakpointMarker. Quando si definisce un indicatore di punto di interruzione per il debugger, è necessario dichiararlo utilizzando l'indicatore come super tipo. Questo consente al modello di debug di trovare tutti i possibili punti di interruzione all'interno di un file di origine attraverso la ricerca di sottotipi del relativo indicatore. Nell'esempio appena riportato, javaExceptionBreakpointMarker presenta un super tipo, javaBreakpointMarker, il cui super tipo a sua volta è breakpointMarker. javaExceptionBreakpoint (definito nell'estensione del punto di interruzione) designa javaExceptionBreakpointMarker come suo indicatore.
Pertanto, quando il codice di debug ottiene un file di codice di origine, può eseguire una ricerca di tutti gli indicatori il cui super tipo sia org.eclipse.debug.core.breakpointMarker. Dopo aver trovato tutti i membri, può quindi utilizzare il registro degli indicatori per associare gli indicatori alle classi dei punti di interruzione collegati. In questo modo, il codice di debug della piattaforma può genericamente trovare tutti i tipi di punti di interruzione impostati su un determinato file di origine.