Точки прерывания позволяют пользователям приостанавливать выполнение программы на конкретной инструкции. Как правило, точки прерывания отображаются в пользовательском интерфейсе вместе с исходным кодом. В результате активации точки прерывания выполнение программы приостанавливается, при этом выдается событие отладки 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. После этого с помощью регистра расширений для всех маркеров определяются связанные классы точек прерывания. Таким образом, отладчик платформы может найти все типы точек прерывания, заданные в конкретном исходном файле.