断点

断点允许用户在特定位置暂挂程序的执行。断点通常与源代码一起显示在用户界面。当在程序执行期间遇到断点时,程序将因为 BREAKPOINT 而暂挂并触发一个 SUSPEND 调试事件。

如果插件需要在其用户界面中显示断点,则您可以将 IBreakpointListener 添加至 IBreakpointManagerIBreakpointManager 是所有断点的中央权威机构 。将使用断点管理器来添加和除去断点,断点管理器又将有关断点活动的信息告知任何侦听器。可以使用断点管理器来启用或禁用断点操作。可以从 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,且 javaBreakpointMarker 的超类型为 breakpointMarkerjavaExceptionBreakpoint(它是在断点扩展中定义的)指定 javaExceptionBreakpointMarker 作为其标记。

这表示什么?当调试代码包含源代码文件时,它可以搜索其超类型为 org.eclipse.debug.core.breakpointMarker 的所有标记。找到所有标记后,它就可以使用扩展注册表将这些标记映射至其相关联的断点类。这样,平台调试代码一般就能找到在特定源文件上设置的所有断点类型。