From 9146796fd600089ddaf33d290a0e14a7904da125 Mon Sep 17 00:00:00 2001 From: John Cortell Date: Fri, 12 Mar 2010 23:36:43 +0000 Subject: [PATCH] [305752] Constants for standard event breakpoint types should be outside the CDI-GDB plugin --- .../debug/core/model/ICEventBreakpoint.java | 152 ++++++++++++++++-- .../META-INF/MANIFEST.MF | 2 +- .../debug/mi/core/cdi/EventBreakpointHit.java | 2 +- .../mi/core/cdi/model/EventBreakpoint.java | 95 ++++------- .../cdt/debug/mi/core/ErrorThread.java | 2 +- .../mi/core/event/MICatchpointHitEvent.java | 2 +- .../cdt/debug/mi/core/MIProcessAdapter.java | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../core/tests/EventBreakpointTests.java | 8 +- 9 files changed, 180 insertions(+), 87 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICEventBreakpoint.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICEventBreakpoint.java index ffabf8294fa..a664003eb86 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICEventBreakpoint.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICEventBreakpoint.java @@ -19,35 +19,161 @@ import org.eclipse.core.runtime.CoreException; * is break on raising exception in C++, or break on receiving signal. * * @sinse 5.0 + * @since 7.0 */ public interface ICEventBreakpoint extends ICBreakpoint { /** - * Breakpoint attribute storing the event breakpoint event id + * Breakpoint attribute storing the event breakpoint event id. Basically, + * this indicates what type of event the breakpoint catches--e.g., a C++ + * exception throw, a library load, a thread exit, etc. Event types can be + * contributed via the "breakpointContribution" extension point. Stock CDT + * contributes a number of them, which are represented here by the + * EVENT_TYPE_XXXXX constants + * + *

* This attribute is a String. * */ - public static final String EVENT_TYPE_ID = "org.eclipse.cdt.debug.core.eventbreakpoint_event_id"; //$NON-NLS-1$ + public static final String EVENT_TYPE_ID = "org.eclipse.cdt.debug.core.eventbreakpoint_event_id"; //$NON-NLS-1$ + /** - * Breakpoint attribute storing the event breakpoint argument - * This attribute is a String. + * An event breakpoint of this type suspends the target program when it + * catches a C++ exception. This type of event has no parameters. * + * @since 7.0 + */ + public static final String EVENT_TYPE_CATCH = "org.eclipse.cdt.debug.gdb.catch"; //$NON-NLS-1$ + + /** + * An event breakpoint of this type suspends the target program when it + * throws a C++ exception. This type of event has no parameters. + * + * @since 7.0 + */ + public static final String EVENT_TYPE_THROW = "org.eclipse.cdt.debug.gdb.throw"; //$NON-NLS-1$ + + /** + * An event breakpoint of this type suspends the target program when it + * catches a signal (POSIX). This type of event has a single parameter of + * type in, indicating the specific signal. + * + * @since 7.0 + */ + public static final String EVENT_TYPE_SIGNAL_CATCH = "org.eclipse.cdt.debug.gdb.signal"; //$NON-NLS-1$ + + /** + * An event breakpoint of this type suspends the target program when it + * calls fork() (POSIX). This type of event has no parameters. + * + * @since 7.0 + */ + public static final String EVENT_TYPE_FORK = "org.eclipse.cdt.debug.gdb.catch_fork"; //$NON-NLS-1$ + + /** + * An event breakpoint of this type suspends the target program when it + * calls vfork() (POSIX). This type of event has no parameters. + * + * @since 7.0 + */ + public static final String EVENT_TYPE_VFORK = "org.eclipse.cdt.debug.gdb.catch_vfork"; //$NON-NLS-1$ + + /** + * An event breakpoint of this type suspends the target program when it + * calls exec() (POSIX). This type of event has no parameters. + * + * @since 7.0 + */ + public static final String EVENT_TYPE_EXEC = "org.eclipse.cdt.debug.gdb.catch_exec"; //$NON-NLS-1$ + + /** + * An event breakpoint of this type suspends the target program when it + * calls exit() (POSIX). This type of event has no parameters. + * + * @since 7.0 + */ + public static final String EVENT_TYPE_EXIT = "org.eclipse.cdt.debug.gdb.catch_exit"; //$NON-NLS-1$ + + /** + * An event breakpoint of this type suspends the target program when a new + * process starts. This type of event has no parameters. + * + * @since 7.0 + */ + public static final String EVENT_TYPE_PROCESS_START = "org.eclipse.cdt.debug.gdb.catch_start"; //$NON-NLS-1$ + + /** + * An event breakpoint of this type suspends the target program when a + * process exits. This type of event has no parameters. + * + * @since 7.0 + */ + public static final String EVENT_TYPE_PROCESS_STOP = "org.eclipse.cdt.debug.gdb.catch_stop"; //$NON-NLS-1$ + + /** + * An event breakpoint of this type suspends the target program when a new + * thread starts. This type of event has no parameters. + * + * @since 7.0 + */ + public static final String EVENT_TYPE_THREAD_START = "org.eclipse.cdt.debug.gdb.catch_thread_start"; //$NON-NLS-1$ + + /** + * An event breakpoint of this type suspends the target program when a + * thread exits. This type of event has no parameters. + * + * @since 7.0 + */ + public static final String EVENT_TYPE_THREAD_EXIT = "org.eclipse.cdt.debug.gdb.catch_thread_exit"; //$NON-NLS-1$ + + /** + * An event breakpoint of this type suspends the target program when a + * thread joins another one (waits for it to exit) This type of event has no + * parameters. + * + * @since 7.0 + */ + public static final String EVENT_TYPE_THREAD_JOIN = "org.eclipse.cdt.debug.gdb.catch_thread_join"; //$NON-NLS-1$ + + /** + * An event breakpoint of this type suspends the target program when it + * loads a library. This type of event has no parameters. + * + * @since 7.0 + */ + public static final String EVENT_TYPE_LIBRARY_LOAD = "org.eclipse.cdt.debug.gdb.catch_load"; //$NON-NLS-1$ + + /** + * An event breakpoint of this type suspends the target program when it + * unloads a library. This type of event has no parameters. + * + * @since 7.0 + */ + public static final String EVENT_TYPE_LIBRARY_UNLOAD = "org.eclipse.cdt.debug.gdb.catch_unload"; //$NON-NLS-1$ + + /** + * Breakpoint attribute storing the event breakpoint argument. This + * attribute is a String, though it may be a stringified + * representation of another type (it may be a number, for example). + * Currently, an event type can have only one argument */ public static final String EVENT_ARG = "org.eclipse.cdt.debug.core.eventbreakpoint_event_arg"; //$NON-NLS-1$ - + /** - * Get event breakpoint type. This is usually id in reverse web notation. - * This type is interpreted by underlying debugger implementation. - * Use extension point org.eclipse.cdt.debug.ui.breakpointContribution to define user visible label for this event type. + * Get the event breakpoint type. One of our EVENT_TYPE_XXXXX constants or a + * custom type contributed via the breakpointContribution + * extension point + * * @return event breakpoint type id (not null) - * @throws CoreException + * @throws CoreException */ String getEventType() throws CoreException; /** - * Get extra event argument. For example name of the exception or number of a signal. - * Use extension point org.eclipse.cdt.debug.ui.breakpointContribution to define UI control to edit/view this argument - * @return event argument (not null) - * @throws CoreException + * Get the event argument, if the type has one. Currently, an event type can + * have at most one argument. + * + * @return event argument, or null if not applicable + * @throws CoreException */ String getEventArgument() throws CoreException; } diff --git a/debug/org.eclipse.cdt.debug.mi.core/META-INF/MANIFEST.MF b/debug/org.eclipse.cdt.debug.mi.core/META-INF/MANIFEST.MF index 42799b8dd2b..f3ee08098da 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/META-INF/MANIFEST.MF +++ b/debug/org.eclipse.cdt.debug.mi.core/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.debug.mi.core; singleton:=true -Bundle-Version: 6.1.0.qualifier +Bundle-Version: 7.0.0.qualifier Bundle-Activator: org.eclipse.cdt.debug.mi.core.MIPlugin Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventBreakpointHit.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventBreakpointHit.java index 584aea7b474..a7fc6839bcd 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventBreakpointHit.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventBreakpointHit.java @@ -14,7 +14,7 @@ import org.eclipse.cdt.debug.core.cdi.ICDIEventBreakpointHit; import org.eclipse.cdt.debug.mi.core.event.MICatchpointHitEvent; /** - * @since 6.1 + * @since 7.0 */ public class EventBreakpointHit extends SessionObject implements ICDIEventBreakpointHit { diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/EventBreakpoint.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/EventBreakpoint.java index 03d4c5c21d3..6850c1a0c32 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/EventBreakpoint.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/EventBreakpoint.java @@ -12,10 +12,12 @@ package org.eclipse.cdt.debug.mi.core.cdi.model; import java.util.Arrays; import java.util.HashMap; +import java.util.Map; import org.eclipse.cdt.debug.core.cdi.ICDICondition; import org.eclipse.cdt.debug.core.cdi.model.ICDIEventBreakpoint; import org.eclipse.cdt.debug.core.model.ICBreakpointType; +import org.eclipse.cdt.debug.core.model.ICEventBreakpoint; import org.eclipse.cdt.debug.mi.core.output.MIBreakpoint; /** @@ -23,71 +25,38 @@ import org.eclipse.cdt.debug.mi.core.output.MIBreakpoint; */ public class EventBreakpoint extends Breakpoint implements ICDIEventBreakpoint { - public static final String CATCH = "org.eclipse.cdt.debug.gdb.catch"; - public static final String THROW = "org.eclipse.cdt.debug.gdb.throw"; - public static final String SIGNAL_CATCH = "org.eclipse.cdt.debug.gdb.signal"; - public static final String STOP_ON_FORK = "org.eclipse.cdt.debug.gdb.catch_fork"; - public static final String STOP_ON_VFORK = "org.eclipse.cdt.debug.gdb.catch_vfork"; - public static final String STOP_ON_EXEC = "org.eclipse.cdt.debug.gdb.catch_exec"; - /** - * @since 6.0 - */ - public static final String CATCH_EXIT = "org.eclipse.cdt.debug.gdb.catch_exit"; - /** - * @since 6.0 - */ - public static final String CATCH_START = "org.eclipse.cdt.debug.gdb.catch_start"; - /** - * @since 6.0 - */ - public static final String CATCH_STOP = "org.eclipse.cdt.debug.gdb.catch_stop"; - /** - * @since 6.0 - */ - public static final String CATCH_THREAD_START = "org.eclipse.cdt.debug.gdb.catch_thread_start"; - /** - * @since 6.0 - */ - public static final String CATCH_THREAD_EXIT = "org.eclipse.cdt.debug.gdb.catch_thread_exit"; - /** - * @since 6.0 - */ - public static final String CATCH_THREAD_JOIN = "org.eclipse.cdt.debug.gdb.catch_thread_join"; - /** - * @since 6.0 - */ - public static final String CATCH_LOAD = "org.eclipse.cdt.debug.gdb.catch_load"; - /** - * @since 6.0 - */ - public static final String CATCH_UNLOAD = "org.eclipse.cdt.debug.gdb.catch_unload"; private String eventType; private String arg; - private static final HashMap idToKeyword = new HashMap(); + + /** + * A mapping of ICEventBreakpoint event types to their corresponding gdb + * catchpoint keyword + */ + private static final Map idToKeyword = new HashMap(); static { // these Ids are also referenced in mi.ui plugin as contribution // to event breakpoints selector - idToKeyword.put(CATCH, "catch"); - idToKeyword.put(THROW, "throw"); - idToKeyword.put(SIGNAL_CATCH, "signal"); - idToKeyword.put(STOP_ON_EXEC, "exec"); - idToKeyword.put(STOP_ON_FORK, "fork"); - idToKeyword.put(STOP_ON_VFORK, "vfork"); - idToKeyword.put(CATCH_EXIT, "exit"); - idToKeyword.put(CATCH_START, "start"); - idToKeyword.put(CATCH_STOP, "stop"); - idToKeyword.put(CATCH_THREAD_START, "thread_start"); - idToKeyword.put(CATCH_THREAD_EXIT, "thread_exit"); - idToKeyword.put(CATCH_THREAD_JOIN, "thread_join"); - idToKeyword.put(CATCH_LOAD, "load"); - idToKeyword.put(CATCH_UNLOAD, "unload"); + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_CATCH, "catch"); //$NON-NLS-1$ + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_THROW, "throw"); //$NON-NLS-1$ + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_SIGNAL_CATCH, "signal"); //$NON-NLS-1$ + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_EXEC, "exec"); //$NON-NLS-1$ + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_FORK, "fork"); //$NON-NLS-1$ + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_VFORK, "vfork"); //$NON-NLS-1$ + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_EXIT, "exit"); //$NON-NLS-1$ + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_PROCESS_START, "start"); //$NON-NLS-1$ + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_PROCESS_STOP, "stop"); //$NON-NLS-1$ + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_THREAD_START, "thread_start"); //$NON-NLS-1$ + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_THREAD_EXIT, "thread_exit"); //$NON-NLS-1$ + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_THREAD_JOIN, "thread_join"); //$NON-NLS-1$ + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_LIBRARY_LOAD, "load"); //$NON-NLS-1$ + idToKeyword.put(ICEventBreakpoint.EVENT_TYPE_LIBRARY_UNLOAD, "unload"); //$NON-NLS-1$ } public EventBreakpoint(Target target, String event, String arg, ICDICondition cond, boolean enabled) { super(target, ICBreakpointType.REGULAR, cond, enabled); this.eventType = event; - this.arg = arg==null?"":arg; + this.arg = arg==null?"":arg; //$NON-NLS-1$ } public String getEventType() { @@ -103,7 +72,7 @@ public class EventBreakpoint extends Breakpoint implements ICDIEventBreakpoint { String etype = getEventType(); String key= idToKeyword.get(etype); if (key!=null) return key; - return "unknown"; + return "unknown"; //$NON-NLS-1$ } public String getGdbArg() { @@ -130,16 +99,16 @@ public class EventBreakpoint extends Breakpoint implements ICDIEventBreakpoint { * @return null if unknown type, null cannot be used to create valid EventBreakpoint */ public static String getEventTypeFromMI(MIBreakpoint miBreakpoint) { - if (miBreakpoint.getWhat().equals("exception catch")) { - return EventBreakpoint.CATCH; - } else if (miBreakpoint.getWhat().equals("exception throw")) { - return EventBreakpoint.THROW; - } else if (miBreakpoint.getType().equals("catch signal")) { + if (miBreakpoint.getWhat().equals("exception catch")) { //$NON-NLS-1$ + return ICEventBreakpoint.EVENT_TYPE_CATCH; + } else if (miBreakpoint.getWhat().equals("exception throw")) { //$NON-NLS-1$ + return ICEventBreakpoint.EVENT_TYPE_THROW; + } else if (miBreakpoint.getType().equals("catch signal")) { //$NON-NLS-1$ // catch signal does not work in gdb - return EventBreakpoint.SIGNAL_CATCH; + return ICEventBreakpoint.EVENT_TYPE_SIGNAL_CATCH; } String miType = miBreakpoint.getType(); - String prefix = "catch "; + String prefix = "catch "; //$NON-NLS-1$ if (miType.startsWith(prefix)) { String key = miType.substring(prefix.length()); for (String id : idToKeyword.keySet()) { @@ -154,7 +123,7 @@ public class EventBreakpoint extends Breakpoint implements ICDIEventBreakpoint { public static String getEventArgumentFromMI(MIBreakpoint miBreakpoint) { // need a working gdb command command that support catch event argument test test - return ""; + return ""; //$NON-NLS-1$ } } diff --git a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/ErrorThread.java b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/ErrorThread.java index dd6f1e1254a..3150718bad7 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/ErrorThread.java +++ b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/ErrorThread.java @@ -17,7 +17,7 @@ import java.io.OutputStream; /** * Receiving, and printing to the console, stderr output - * @since 6.1 + * @since 7.0 * @noextend This class is not intended to be subclassed by clients. * @noinstantiate This class is not intended to be instantiated by clients. */ diff --git a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/event/MICatchpointHitEvent.java b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/event/MICatchpointHitEvent.java index c63d2dafa37..7a06414e3b2 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/event/MICatchpointHitEvent.java +++ b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/event/MICatchpointHitEvent.java @@ -14,7 +14,7 @@ import org.eclipse.cdt.debug.mi.core.MISession; import org.eclipse.cdt.debug.mi.core.output.MIExecAsyncOutput; /** - * @since 6.1 + * @since 7.0 */ public class MICatchpointHitEvent extends MIStoppedEvent { diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIProcessAdapter.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIProcessAdapter.java index 1d81fe7cde4..32b56f2ed16 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIProcessAdapter.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIProcessAdapter.java @@ -109,7 +109,7 @@ public class MIProcessAdapter implements MIProcess { * @throws IOException * on failure to create the child process * - * @since 6.1 + * @since 7.0 */ protected Process createGDBProcess(String[] args) throws IOException { return ProcessFactory.getFactory().exec(args); diff --git a/debug/org.eclipse.cdt.debug.mi.ui/META-INF/MANIFEST.MF b/debug/org.eclipse.cdt.debug.mi.ui/META-INF/MANIFEST.MF index 3286716b085..d958b582571 100644 --- a/debug/org.eclipse.cdt.debug.mi.ui/META-INF/MANIFEST.MF +++ b/debug/org.eclipse.cdt.debug.mi.ui/META-INF/MANIFEST.MF @@ -14,7 +14,7 @@ Export-Package: org.eclipse.cdt.debug.mi.internal.ui;x-internal:=true, org.eclipse.cdt.debug.mi.ui Require-Bundle: org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)", org.eclipse.ui;bundle-version="[3.2.0,4.0.0)", - org.eclipse.cdt.debug.mi.core;bundle-version="[6.0.0,7.0.0)", + org.eclipse.cdt.debug.mi.core;bundle-version="[7.0.0,8.0.0)", org.eclipse.cdt.debug.ui;bundle-version="[7.0.0,8.0.0)", org.eclipse.cdt.debug.core;bundle-version="[7.0.0,8.0.0)", org.eclipse.cdt.core;bundle-version="[5.0.0,6.0.0)", diff --git a/debug/org.eclipse.cdt.debug.ui.tests/core/org/eclipse/cdt/debug/core/tests/EventBreakpointTests.java b/debug/org.eclipse.cdt.debug.ui.tests/core/org/eclipse/cdt/debug/core/tests/EventBreakpointTests.java index 7f58310fc00..c101bf60c01 100644 --- a/debug/org.eclipse.cdt.debug.ui.tests/core/org/eclipse/cdt/debug/core/tests/EventBreakpointTests.java +++ b/debug/org.eclipse.cdt.debug.ui.tests/core/org/eclipse/cdt/debug/core/tests/EventBreakpointTests.java @@ -16,15 +16,13 @@ import junit.framework.Test; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.debug.core.cdi.CDIException; -import org.eclipse.cdt.debug.core.cdi.ICDIFunctionLocation; -import org.eclipse.cdt.debug.core.cdi.ICDILocation; import org.eclipse.cdt.debug.core.cdi.ICDILocator; import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint; import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpointManagement3; import org.eclipse.cdt.debug.core.cdi.model.ICDIEventBreakpoint; import org.eclipse.cdt.debug.core.model.ICBreakpointType; +import org.eclipse.cdt.debug.core.model.ICEventBreakpoint; import org.eclipse.cdt.debug.mi.core.MIException; -import org.eclipse.cdt.debug.mi.core.cdi.model.EventBreakpoint; public class EventBreakpointTests extends AbstractDebugTest { public static Test suite() { @@ -54,11 +52,11 @@ public class EventBreakpointTests extends AbstractDebugTest { public void testCatch() throws CModelException, IOException, MIException, CDIException { - eventbreakpoints(EventBreakpoint.CATCH, ""); + eventbreakpoints(ICEventBreakpoint.EVENT_TYPE_CATCH, ""); } public void testThrow() throws CModelException, IOException, MIException, CDIException { - eventbreakpoints(EventBreakpoint.THROW, ""); + eventbreakpoints(ICEventBreakpoint.EVENT_TYPE_THROW, ""); } private void eventbreakpoints(String type, String arg) throws CModelException, IOException, MIException, CDIException {