ブレークポイント

ブレークポイントにより、ユーザーは特定の場所でプログラムの実行を中断できます。 ブレークポイントは、通常、ソース・コードとともに UI に表示されます。 プログラムの実行中にブレークポイントに到達した場合、プログラムは中断し、BREAKPOINT を理由とする SUSPEND デバッグ・イベントをトリガーします。

ご使用のプラグインでその UI にブレークポイントを表示する必要がある場合は、 IBreakpointListenerIBreakpointManager に追加します。 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 であるすべてのマーカーを検索できます。 すべてのマーカーを検出することにより、拡張レジストリーを使用して、そのマーカーを関連するブレークポイント・クラスにマップできます。 この方法により、プラットフォーム・デバッグ・コードは、通常、特定のソース・ファイル上に設定されたすべてのブレークポイント・タイプを検出できます。