Los puntos de interrupción permiten a los usuarios suspender la ejecución de un programa en una ubicación concreta. Se suelen mostrar puntos de interrupción en la UI junto con el código fuente. Cuando se encuentra un punto de interrupción durante la ejecución de un programa, éste queda suspendido y desencadena un evento de depuración SUSPEND, siendo BREAKPOINT la razón.
Si el conector tiene que mostrar puntos de interrupción en su UI, puede añadir un IBreakpointListener a IBreakpointManager. IBreakpointManager es la autoridad central sobre todos los puntos de interrupción. Los puntos de interrupción se añaden y eliminan utilizando el gestor de puntos de interrupción, que a su vez informa a los escuchas sobre la actividad de los puntos de interrupción. La operación de puntos de interrupción puede habilitarse o inhabilitarse utilizando el gestor de puntos de interrupción. El gestor de puntos de interrupción puede obtenerse desde DebugPlugin:
IBreakpointManager mgr = DebugPlugin.getDefault().getBreakpointManager();
Los conectores que definen modelos de depuración propios y configuraciones de lanzamiento propias necesitan con frecuencia definir sus propios tipos de puntos de interrupción. Puede implementar puntos de interrupción de su modelo de depuración concreto definiendo una clase que implemente IBreakpoint.
Los puntos de interrupción se implementan mediante marcadores de recursos. Recuerde que los marcadores de recursos le permiten asociar metainformación acerca de un recurso en forma de atributos con nombre. Al implementar un punto de interrupción mediante marcadores, el modelo de depuración puede hacer uso de todas las funciones de marcadores existentes, como las de persistencia, búsqueda, adición, supresión y visualización en editores.
¿Por qué es importante conocer los marcadores al utilizar puntos de interrupción? Al crear un tipo de punto de interrupción, también debe especificar un tipo de marcador asociado. Todas las extensiones de org.eclipse.debug.core.breakpoints deben ir acompañadas de una extensión de org.eclipse.core.resources.markers. Esto se muestra al observar las extensiones definidas por las herramientas Java para los puntos de interrupción 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>
El conector de depuración define un tipo de marcador especial, org.eclipse.debug.core.breakpointMarker. Al definir un marcador de punto de interrupción para el depurador, debe declararlo utilizando este marcador como supertipo. Esto permite que el modelo de depuración busque todos los puntos de interrupción posibles dentro de un archivo fuente buscando los subtipos de su marcador. En el ejemplo anterior, javaExceptionBreakpointMarker tiene un supertipo, javaBreakpointMarker, cuyo supertipo es breakpointMarker. javaExceptionBreakpoint (definido en la extensión de punto de interrupción) designa javaExceptionBreakpointMarker como su marcador.
¿Qué significa todo esto? Cuando el código de depuración obtiene un archivo de código fuente, puede buscar todos los marcadores cuyo supertipo sea org.eclipse.debug.core.breakpointMarker. Cuando haya encontrado todos los marcadores, puede utilizar el registro de extensiones para correlacionar los marcadores con sus clases de punto de interrupción asociadas. De este modo, el código de depuración de la plataforma puede buscar de forma genérica todos los tipos de puntos de interrupción que se han establecido en un archivo fuente determinado.