Точки прерывания позволяют пользователям приостанавливать выполнение программы на конкретной инструкции. Как правило, точки прерывания отображаются в пользовательском интерфейсе вместе с исходным кодом. В результате активации точки прерывания выполнение программы приостанавливается, при этом выдается событие отладки SUSPEND с кодом причины BREAKPOINT.
Если в соответствии с требованиями модуля точки прерывания должны быть показаны в пользовательском интерфейсе, добавьте IBreakpointListener к IBreakpointManager. IBreakpointManager управляет всеми точками прерывания. Диспетчер точек прерывания добавляет, удаляет точки прерывания и отправляет сообщения о состоянии точек прерывания. С помощью диспетчера точек прерывания можно включать и отключать точки прерывания. Доступ к диспетчеру точек прерывания предоставляет DebugPlugin:
IBreakpointManager mgr = DebugPlugin.getDefault().getBreakpointManager();
Модули, определяющие собственные модели отладки и конфигурации запуска, как правило, задают и собственные типы точек прерывания. Для реализации точек прерывания в конкретной модели отладки следует задать класс, применяющий IBreakpoint.
Точки прерывания реализуются с помощью маркеров ресурсов. Маркеры ресурсов позволяют указать метаданные, описывающие ресурс, в виде именованных атрибутов. Реализация точек прерывания с помощью маркеров ресурсов позволяет модели отладки получить доступ ко всем существующим функциям маркеров, таким как хранение, поиск, добавление, удаление и отображение в редакторах.
Зачем при работе с точками прерывания необходимо иметь представление о маркерах? При создании типа точек прерывания следует указать связанный тип маркеров. Каждое расширение org.eclipse.debug.core.breakpoints должно быть дополнено расширением org.eclipse.core.resources.markers.В качестве наглядного примера можно привести расширения, заданные инструментами Java для точек прерывания 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>
Модуль отладки задает специальный тип маркера org.eclipse.debug.core.breakpointMarker.Остальные маркеры точек прерывания должны быть определены в качестве производных этого типа. Такой подход позволяет модели отладки найти все возможные точки прерывания, заданные в исходном файле, путем поиска производных типов этого маркера. В примере, приведенном выше, javaExceptionBreakpointMarker является производным типа javaBreakpointMarker, который, в свою очередь, является производным breakpointMarker. Тип javaExceptionBreakpoint (заданный в расширении точки прерывания) определяет в качестве связанного маркера javaExceptionBreakpointMarker.
Что это означает? Получив файл исходного кода, отладчик может выполнять поиск всех маркеров, которые являются производными типа org.eclipse.debug.core.breakpointMarker. После этого с помощью регистра расширений для всех маркеров определяются связанные классы точек прерывания. Таким образом, отладчик платформы может найти все типы точек прерывания, заданные в конкретном исходном файле.