Punkty zatrzymania

Punkty zatrzymania umożliwiają zawieszenie wykonywania programu w konkretnym miejscu.Punkty zatrzymania są zazwyczaj pokazane w interfejsie użytkownika razem z kodem źródłowym. Jeśli w trakcie wykonywania programu napotkany zostanie punkt zatrzymania, program zostanie zawieszony i zostanie wyzwolone zdarzenie debugowania SUSPEND (zawieszenie) z parametrem BREAKPOINT (punkt zatrzymania) jako przyczyną.

Jeśli istnieje potrzeba, aby moduł dodatkowy pokazywał punkty zatrzymania w swoim interfejsie użytkownika, można dodać obiekt nasłuchiwania IBreakpointListener do menedżera IBreakpointManager. Menedżer IBreakpointManager jest nadrzędny wobec wszystkich punktów zatrzymania. Punkty zatrzymania można dodawać i usuwać za pomocą menedżera punktów zatrzymania, który z kolei powiadamia o aktywności punktu zatrzymania odpowiednią funkcję nasłuchiwania. Działanie punktów zatrzymania może być włączane lub wyłączane za pomocą menedżera punktów zatrzymania. Menedżer punktów zatrzymania jest dostępny w module dodatkowym DebugPlugin:

IBreakpointManager mgr = DebugPlugin.getDefault().getBreakpointManager();

W modułach dodatkowych, w których zdefiniowane zostały ich własne modele debugowania i konfiguracje startowe, często istnieje konieczność zdefiniowania własnych typów punktów zatrzymania.Punkty zatrzymania można implementować w określonym modelu debugowania przez zdefiniowanie klasy, która implementuje interfejs IBreakpoint.

Punkty zatrzymania są implementowane przy użyciu znaczników zasobów.Należy przypomnieć, że znaczniki zasobów pozwalają powiązać metainformacje o zasobie i wyświetlić je w formie atrybutów nazwanych. Po zaimplementowaniu punktu zatrzymania za pomocą znaczników, model debugowania może korzystać ze wszystkich istniejących funkcji znacznika, takich jak utrwalanie, wyszukiwanie, dodawanie, usuwanie i wyświetlanie w edytorach.

Dlaczego istotna jest wiedza na temat znaczników przy używaniu punktów zatrzymania? W trakcie tworzenia typu punktu zatrzymania należy także określić powiązany typ znacznika.Każdemu rozszerzeniu punktu rozszerzenia org.eclipse.debug.core.breakpoints powinno towarzyszyć rozszerzenie punktu rozszerzenia org.eclipse.core.resources.markers. Najlepiej przedstawia to poniższy przykład rozszerzeń zdefiniowanych w środowisku JDT dla punktów zatrzymania 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>

Moduł dodatkowy debugowania definiuje specjalny typ znacznika - org.eclipse.debug.core.breakpointMarker.Po zdefiniowaniu znacznika punktu zatrzymania należy zadeklarować go, używając tego znacznika jako nadtypu. To pozwoli modelowi debugowania na wyszukanie wszystkich możliwych punktów zatrzymania w pliku źródłowym przez wyszukanie podtypów jego znacznika. W powyższym przykładzie nadtypem znacznika javaExceptionBreakpointMarker jest znacznik javaBreakpointMarker, którego nadtypem jest z kolei znacznik breakpointMarker. Punkt zatrzymania javaExceptionBreakpoint (zdefiniowany w rozszerzeniu punktu zatrzymania) określa jako swój znacznik javaExceptionBreakpointMarker.

Co to wszystko znaczy?Gdy kod debugowania otrzyma plik kodu źródłowego, będzie mógł wyszukać wszystkie znaczniki, których nadtypem jest org.eclipse.debug.core.breakpointMarker. Po wyszukaniu wszystkich znaczników może użyć rejestru rozszerzenia do odwzorowania znaczników na powiązane klasy punktów zatrzymania. W ten sposób kod debugowania platformy może wyszukać wszystkie typy punktów zatrzymania, które zostały ustawione w danym pliku źródłowym.