I punti di interruzione consentono agli utenti di sospendere l'esecuzione di un programma in una particolare posizione. I punti di interruzione sono in genere visualizzati nella UI insieme al codice sorgente. E possibile aggiungere un IBreakpointListener a un IBreakpointManager per poter ricevere una notifica quando i punti di interruzione vengono aggiunti o rimossi. 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 come motivo.
I plug-in che definiscono propri modelli di debug e configurazioni di avvio spesso devono definire tipi di punti di interruzione personalizzati. E possibile implementare punti di interruzione per il particolare modello di debug, definendo una classe che implementi IBreakpoint.
I punti di interruzione vengono implementati utilizzandoindicatori di risorsa. E importante ricordare che gli indicatori di risorsa consentono di associare meta-informazioni su una nella forma di attributi denominati. Implementando un punto di interruzione mediante indicatori, il modello di debug può far uso di tutte le funzioni degli indicatori esistenti come la persistenza, la ricerca, l'aggiunta e l'eliminazione.
Perché è importante avere informazioni sugli indicatori quando si utilizzano punti di interruzione? Quando si crea un tipo di punto di interruzione, è necessario specificare anche 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. Per verificare quanto detto, osservare le estensioni definite dagli strumenti 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 plug-in di debug definisce un tipo speciale di indicatore, org.eclipse.debug.core.breakpointMarker. Quando si definisce un indicatore, è necessario dichiararlo utilizzando questo indicatore come supertipo. Questo consente al modello di debug di individuare tutti i possibili punti di interruzione all'interno di un file di origine ricercando i sottotipi del suo indicatore. Nell'esempio riportato, javaExceptionBreakpointMarker ha un supertipo, javaBreakpointMarker, il cui supertipo è breakpointMarker. javaExceptionBreakpoint (definito nell'estensione dei punti di interruzione) designa javaExceptionBreakpointMarker come suo indicatore.
Cosa significa tutto questo? Quando il codice di debug ottiene una risorsa di codice sorgente, può ricercare tutti gli indicatori il cui supertipo èorg.eclipse.debug.core.breakpointMarker. Avendo individuato tutti gli indicatori, può utilizzare il registro dei plug-in per mappare gli indicatori alle classi di punti di interruzione associate. In questo modo, il codice di debug della piattaforma può genericamente rilevare tutti i tipi di punti di interruzione impostati su un particolare file di origine.