岔斷點可讓使用者在特定位置上暫停執行程式。岔斷點一般會和程式碼一起顯示在使用者介面。如果在執行程式期間,遇到岔斷點,程式便會暫停,並以 BREAKPOINT 為由,觸發 SUSPEND 除錯事件。
如果您的外掛程式需要在其使用者介面中顯示岔斷點,您可以將 IBreakpointListener 新增至 IBreakpointManager。 IBreakpointManager 是所有岔斷點的中央權限。由於岔斷點是用岔斷點管理程式來新增和移除的,因此岔斷點管理程式會通知所有接聽器有關岔斷點的活動。 您也可以用岔斷點管理程式來啟用或停用岔斷點的作業。岔斷點管理程式可從 DebugPlugin 中取得:
IBreakpointManager mgr = DebugPlugin.getDefault().getBreakpointManager();
定義特有除錯模型和啟動配置的外掛程式通常需要定義特有的岔斷點類型。您可以透過定義一個實作 IBreakpoint 的類別,為特定的除錯模型實作岔斷點。
使用資源標記來實作岔斷點。呼叫資源標記可讓您以具名屬性的形式,建立與有關資源之 meta 資訊的關聯性。透過使用標記實作一個岔斷點, 除錯模型可以使用編輯器中所有現有的標記功能,例如:持續、搜尋、新增、刪除和顯示。
使用岔斷點時,為什麼一定要瞭解標記? 建立岔斷點類型時,您也必須指定一個相關聯的標記類型。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。當您定義除錯器的岔斷點標記時,您應該宣告它使用此標記作為 Super 類型。如此將容許除錯模型藉由搜尋其標記的子類型,在程式檔內尋找所有可能的岔斷點。 在上述的範例中,javaExceptionBreakpointMarker 具有一個 Super 類型 javaBreakpointMarker,其 Super 類型是 breakpointMarker。javaExceptionBreakpoint (定義在岔斷點延伸中)指定 javaExceptionBreakpointMarker 作為它的標記。
這全部又代表了什麼意義?當除錯程式碼取得程式碼檔案時,它可以搜尋 Super 類型是 org.eclipse.debug.core.breakpointMarker 的所有標記。找到所有標記後,它便可以用延伸登錄,將標記對映到其相關聯的岔斷點類別。 這麼一來,平台除錯程式碼可以普遍尋找到設定在特定程式檔中的所有岔斷點類型。