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.  Puede añadir una interfaz IBreakpointListener a una interfaz IBreakpointManager para recibir notificación de cuándo 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 necesitan con frecuencia definir sus propios tipos de puntos de interrupción.  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, 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, debe declararlo utilizado este marcador como supertipo.  Esto permite que el modelo de depuración localice 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.  El punto de interrupción javaExceptionBreakpoint (definido en la extensión del punto de interrupción) designa javaExceptionBreakpointMarker como su marcador.

¿Qué significa 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.  Cuando ha encontrado todos los marcadores, puede utilizar el registro de conectores 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.

 

Copyright IBM Corporation y otros 2000, 2003.