mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-01 06:05:24 +02:00
[305752] Constants for standard event breakpoint types should be outside the CDI-GDB plugin
This commit is contained in:
parent
cde61d6544
commit
9146796fd6
9 changed files with 180 additions and 87 deletions
|
@ -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
|
||||
*
|
||||
* <p>
|
||||
* This attribute is a <code>String</code>.
|
||||
*
|
||||
*/
|
||||
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 <code>String</code>.
|
||||
* 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 <code>String</code>, 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 <code>org.eclipse.cdt.debug.ui.breakpointContribution</code> 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 <code>breakpointContribution</code>
|
||||
* 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 <code>org.eclipse.cdt.debug.ui.breakpointContribution</code> 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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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<String, String> idToKeyword = new HashMap<String, String>();
|
||||
|
||||
/**
|
||||
* A mapping of ICEventBreakpoint event types to their corresponding gdb
|
||||
* catchpoint keyword
|
||||
*/
|
||||
private static final Map<String, String> idToKeyword = new HashMap<String, String>();
|
||||
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$
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)",
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Add table
Reference in a new issue