ブレークポイントを使用すると、ユーザーは、プログラムの実行を特定の位置で中断できます。 ブレークポイントは一般的に、ソース・コードとともに UI に表示されます。 ブレークポイントが追加および除去されたときに通知されるように、IBreakpointListener を IBreakpointManager へ追加できます。 プログラムの実行中にブレークポイントが検出されると、プログラムが中断され、SUSPEND デバッグ・イベントがその理由である BREAKPOINT とともにトリガーされます。
独自のデバッグ・モデルと起動構成を定義するプラグインは多くの場合、独自のブレークポイント・タイプを定義する必要があります。 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 であるすべてのマーカーを検索できます。 すべてのマーカーを検索し終えたら、次にプラグイン・レジストリーを使用して、マーカーを関連付けられたブレークポイント・クラスにマップできます。 この方法では、プラットフォーム・デバッグ・コードは一般的に、特定のソース・ファイルに設定されたすべてのブレークポイント・タイプを検出できます。