Os pontos de interrupção permitem que os usuários suspendam a execução de um programa em uma determinada localização. Normalmente, eles são mostrados na UI junto com o código fonte. Você pode incluir um IBreakpointListener em um IBreakpointManager para ser notificado sobre a inclusão e remoção dos pontos de interrupção. Quando um ponto de interrupção é encontrado durante a execução de um programa, o programa é suspenso e dispara um evento de depuração SUSPEND com BREAKPOINT como a razão.
Os plug-ins que definem seus próprios gabaritos de depuração e configurações de lançamento sempre precisam definir seus próprios tipos de ponto de interrupção. Você pode implementar pontos de interrupção em seu gabarito de depuração específico definindo uma classe que implementa IBreakpoint.
Os pontos de interrupção são implementados com os marcadores de recursos. Recuperar esses marcadores de recursos permite associar metainformações sobre um recurso na forma de atributos nomeados. Implementando um ponto de interrupção utilizando marcadores, o gabarito de depuração pode utilizar todas as funções de marcador existentes, como persistência, pesquisa, inclusão e exclusão.
Por que é importante conhecer marcadores ao utilizar pontos de interrupção? Quando você cria um tipo de ponto de interrupção, também deve especificar um tipo de marcador associado. Todas as extensões de org.eclipse.debug.core.breakpoints devem vir acompanhadas de uma extensão de org.eclipse.core.resources.markers. Isso é melhor demonstrado examinando as extensões definidas pelas ferramentas Java para pontos de interrupção 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>
O plug-in de depuração define um tipo especial de marcador, o org.eclipse.debug.core.breakpointMarker. Ao definir um marcador, é necessário declará-lo utilizando-o como um supertipo. Isso permite que o gabarito de depuração localize todos os pontos de interrupção possíveis em um arquivo fonte, procurando subtipos de seu marcador. No exemplo acima, o javaExceptionBreakpointMarker tem um supertipo, javaBreakpointMarker, cujo supertipo é o breakpointMarker. O javaExceptionBreakpoint (definido na extensão do ponto de interrupção) designa o javaExceptionBreakpointMarker como seu marcador.
O que tudo isso significa? Quando o código de depuração obtém um recurso de código fonte, ele pode procurar todos os marcadores cujos supertipos sejam org.eclipse.debug.core.breakpointMarker. Depois de encontrá-los, ele pode utilizar o registro do plug-in para mapear os marcadores para suas classes de ponto de interrupção associadas. Dessa maneira, o código de depuração da plataforma pode localizar genericamente todos os tipos de ponto de interrupção que foram definidos em um determinado arquivo fonte.