Puntos de interrupción

Los puntos de interrupción permiten a los usuarios suspender la ejecución de un programa en una ubicación concreta. Se suelen mostrar en la UI junto con el código fuente. Podrá añadir una interfaz IBreakpointListener a una interfaz IBreakpointManager para recibir notificación de cuando se añaden o eliminan puntos de interrupción. Cuando se llega a un punto de interrupción durante la ejecución de un programa, este queda suspendido y desencadena el evento de depuración SUSPEND, siendo BREAKPOINT la razón. 

Los conectores que definen modelos de depuración propios y configuraciones de lanzamiento propias suelen tener que definir tipos de punto de interrupción propios. Puede implementar los 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 los marcadores existentes, como las de persistencia, búsqueda, adición y supresión.

¿Por qué es importante estar informado sobre los marcadores cuando se utilizan puntos de interrupción? Al crear un tipo de punto de interrupción, debe especificar asimismo un tipo de marcador asociado. Toda extensión de org.eclipse.debug.core.breakpoints debe estar acompañada de una extensión de org.eclipse.core.resources.markers. La mejor demostración de ello se obtiene viendo las extensiones definidas por las herramientas Java de 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 especial de marcador, org.eclipse.debug.core.breakpointMarker. Cuando defina un marcador, deberá declararlo utilizando este marcador como supertipo. Esto permite que el modelo de depuración localice todos los puntos de interrupción posibles que hay en un archivo fuente buscando los subtipos del correspondiente marcador. En el ejemplo anterior, javaExceptionBreakpointMarker tiene un supertipo, javaBreakpointMarker, cuyo supertipo es breakpointMarker. El atributo javaExceptionBreakpoint (definido en la extensión del punto de interrupción) designa que javaExceptionBreakpointMarker es su marcador.

¿Qué quiere decir todo esto? Cuando el código de depuración obtiene un recurso de código fuente, puede buscar todos los marcadores cuyo supertipo sea org.eclipse.debug.core.breakpointMarker. Una vez encontrados todos los marcadores, podrá utilizar el registro del conector para correlacionar los marcadores con las clases de punto de interrupción asociadas a ellos. De esta manera, el código de depuración de la plataforma puede localizar de forma genérica todos los tipos de punto de interrupción que se hayan establecido en un archivo fuente concreto.

 

Copyright IBM Corp. y otros 2000, 2002.