Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--debug/org.eclipse.cdt.debug.core/cdi/org/eclipse/cdt/debug/core/cdi/ICDIEventBreakpointHit.java24
-rw-r--r--debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java8
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventBreakpointHit.java31
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/event/SuspendedEvent.java4
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/RxThread.java26
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/event/MICatchpointHitEvent.java31
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugModelPresentation.java14
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugUIMessages.properties3
8 files changed, 129 insertions, 12 deletions
diff --git a/debug/org.eclipse.cdt.debug.core/cdi/org/eclipse/cdt/debug/core/cdi/ICDIEventBreakpointHit.java b/debug/org.eclipse.cdt.debug.core/cdi/org/eclipse/cdt/debug/core/cdi/ICDIEventBreakpointHit.java
new file mode 100644
index 00000000000..6d800f81616
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.core/cdi/org/eclipse/cdt/debug/core/cdi/ICDIEventBreakpointHit.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Freescale Semiconductor and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Freescale Semiconductor - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.debug.core.cdi;
+
+/**
+ * Represents an information provided by the session when the program is
+ * stopped by an event breakpoint
+ * @since 7.0
+ */
+public interface ICDIEventBreakpointHit extends ICDISessionObject {
+ /**
+ * Return the type of event breakpoint, as reported by the debugger backend
+ * (e.g., gdb) when it reports the target suspended
+ */
+ String getEventBreakpointType();
+}
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java
index 6b7ecc06c73..2396e6974a8 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java
@@ -35,6 +35,7 @@ import org.eclipse.cdt.debug.core.cdi.ICDIAddressLocation;
import org.eclipse.cdt.debug.core.cdi.ICDIBreakpointHit;
import org.eclipse.cdt.debug.core.cdi.ICDIEndSteppingRange;
import org.eclipse.cdt.debug.core.cdi.ICDIErrorInfo;
+import org.eclipse.cdt.debug.core.cdi.ICDIEventBreakpointHit;
import org.eclipse.cdt.debug.core.cdi.ICDIFunctionLocation;
import org.eclipse.cdt.debug.core.cdi.ICDILineLocation;
import org.eclipse.cdt.debug.core.cdi.ICDILocation;
@@ -1164,6 +1165,9 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
else if ( reason instanceof ICDISharedLibraryEvent ) {
handleSuspendedBySolibEvent( (ICDISharedLibraryEvent)reason );
}
+ else if ( reason instanceof ICDIEventBreakpointHit ) {
+ handleEventBreakpointHit( (ICDIEventBreakpointHit)reason );
+ }
else { // reason is not specified
fireSuspendEvent( DebugEvent.UNSPECIFIED );
}
@@ -1207,6 +1211,10 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
fireSuspendEvent( DebugEvent.BREAKPOINT );
}
+ private void handleEventBreakpointHit( ICDIEventBreakpointHit breakpointHit ) {
+ fireSuspendEvent( DebugEvent.BREAKPOINT );
+ }
+
private void handleWatchpointTrigger( ICDIWatchpointTrigger wt ) {
fireSuspendEvent( DebugEvent.BREAKPOINT );
}
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
new file mode 100644
index 00000000000..584aea7b474
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventBreakpointHit.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Freescale Semiconductor and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Freescale Semiconductor - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.debug.mi.core.cdi;
+
+import org.eclipse.cdt.debug.core.cdi.ICDIEventBreakpointHit;
+import org.eclipse.cdt.debug.mi.core.event.MICatchpointHitEvent;
+
+/**
+ * @since 6.1
+ */
+public class EventBreakpointHit extends SessionObject implements ICDIEventBreakpointHit {
+
+ MICatchpointHitEvent fMiEvent;
+
+ public EventBreakpointHit(Session session, MICatchpointHitEvent miEvent) {
+ super(session);
+ fMiEvent = miEvent;
+ }
+
+ public String getEventBreakpointType() {
+ return fMiEvent.getCatchpointType();
+ }
+}
diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/event/SuspendedEvent.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/event/SuspendedEvent.java
index 9deb409de15..1476be4ece6 100644
--- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/event/SuspendedEvent.java
+++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/event/SuspendedEvent.java
@@ -16,6 +16,7 @@ import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
import org.eclipse.cdt.debug.mi.core.cdi.BreakpointHit;
import org.eclipse.cdt.debug.mi.core.cdi.EndSteppingRange;
import org.eclipse.cdt.debug.mi.core.cdi.ErrorInfo;
+import org.eclipse.cdt.debug.mi.core.cdi.EventBreakpointHit;
import org.eclipse.cdt.debug.mi.core.cdi.FunctionFinished;
import org.eclipse.cdt.debug.mi.core.cdi.Session;
import org.eclipse.cdt.debug.mi.core.cdi.SharedLibraryEvent;
@@ -24,6 +25,7 @@ import org.eclipse.cdt.debug.mi.core.cdi.WatchpointScope;
import org.eclipse.cdt.debug.mi.core.cdi.WatchpointTrigger;
import org.eclipse.cdt.debug.mi.core.cdi.model.Target;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointHitEvent;
+import org.eclipse.cdt.debug.mi.core.event.MICatchpointHitEvent;
import org.eclipse.cdt.debug.mi.core.event.MIErrorEvent;
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIFunctionFinishedEvent;
@@ -66,6 +68,8 @@ public class SuspendedEvent implements ICDISuspendedEvent {
return new ErrorInfo(session, (MIErrorEvent)event);
} else if (event instanceof MISharedLibEvent) {
return new SharedLibraryEvent(session);
+ } else if (event instanceof MICatchpointHitEvent) {
+ return new EventBreakpointHit(session, (MICatchpointHitEvent)event);
}
return session;
}
diff --git a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/RxThread.java b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/RxThread.java
index 8edffa637b1..11385ce9b6b 100644
--- a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/RxThread.java
+++ b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/RxThread.java
@@ -32,6 +32,7 @@ import org.eclipse.cdt.debug.mi.core.command.MIExecStepInstruction;
import org.eclipse.cdt.debug.mi.core.command.MIExecUntil;
import org.eclipse.cdt.debug.mi.core.command.MIInterpreterExecConsole;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointHitEvent;
+import org.eclipse.cdt.debug.mi.core.event.MICatchpointHitEvent;
import org.eclipse.cdt.debug.mi.core.event.MIErrorEvent;
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIFunctionFinishedEvent;
@@ -304,13 +305,13 @@ public class RxThread extends Thread {
}
}
- // GDB does not have reason when stopping on shared, hopefully
- // this will be fix in newer version meanwhile, we will use a hack
- // to cope. On most platform we can detect by looking at the
- // console stream for phrase:
- // ~"Stopped due to shared library event\n"
+ // GDB does not provide reason when stopping on a shared library
+ // event or because of a catchpoint. Hopefully this will be
+ // fixed in a future version. Meanwhile, we will use a hack to
+ // cope. On most platform we can detect by looking at the
+ // console stream for phrase.
//
- // Althought it is a _real_ bad idea to do this, we do not have
+ // Although it is a _real_ bad idea to do this, we do not have
// any other alternatives.
if (list.isEmpty()) {
String[] logs = getStreamRecords();
@@ -320,6 +321,19 @@ public class RxThread extends Thread {
MIEvent e = new MISharedLibEvent(session, exec);
list.add(e);
}
+ else if (logs[i].startsWith("Catchpoint ")) { //$NON-NLS-1$
+ // Example: "Catchpoint 1 (exception caught)"
+ session.getMIInferior().setSuspended();
+ String log = logs[i];
+ String catchpointType = "???"; //$NON-NLS-1$
+ int startIndex = log.lastIndexOf('(');
+ int stopIndex = log.lastIndexOf(')');
+ if ((startIndex >= 0) && (stopIndex >= 0) && (stopIndex > startIndex)) {
+ catchpointType = log.substring(startIndex+1, stopIndex);
+ }
+ MIEvent e = new MICatchpointHitEvent(session, exec, catchpointType);
+ list.add(e);
+ }
}
}
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
new file mode 100644
index 00000000000..c63d2dafa37
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/event/MICatchpointHitEvent.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Freescale Semiconductor and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Freescale Semiconductor - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.debug.mi.core.event;
+
+import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.output.MIExecAsyncOutput;
+
+/**
+ * @since 6.1
+ */
+public class MICatchpointHitEvent extends MIStoppedEvent {
+
+ private String fCatchpointType;
+
+ public MICatchpointHitEvent(MISession source, MIExecAsyncOutput async, String catchpointType) {
+ super(source, async);
+ fCatchpointType = catchpointType;
+ }
+
+ public String getCatchpointType() {
+ return fCatchpointType;
+ }
+}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugModelPresentation.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugModelPresentation.java
index 093e050a68f..5dfdf61c217 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugModelPresentation.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugModelPresentation.java
@@ -24,6 +24,7 @@ import org.eclipse.cdt.core.resources.FileStorage;
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
import org.eclipse.cdt.debug.core.CDebugUtils;
import org.eclipse.cdt.debug.core.cdi.ICDIBreakpointHit;
+import org.eclipse.cdt.debug.core.cdi.ICDIEventBreakpointHit;
import org.eclipse.cdt.debug.core.cdi.ICDIExitInfo;
import org.eclipse.cdt.debug.core.cdi.ICDISharedLibraryEvent;
import org.eclipse.cdt.debug.core.cdi.ICDISignalExitInfo;
@@ -705,22 +706,25 @@ public class CDebugModelPresentation extends LabelProvider implements IDebugMode
ICDebugElement element = (ICDebugElement)thread.getAdapter( ICDebugElement.class );
if ( element != null ) {
Object info = element.getCurrentStateInfo();
- if ( info != null && info instanceof ICDISignalReceived ) {
+ if ( info instanceof ICDISignalReceived ) {
ICDISignal signal = ((ICDISignalReceived)info).getSignal();
reason = MessageFormat.format( CDebugUIMessages.getString( "CDTDebugModelPresentation.13" ), new String[]{ signal.getName(), signal.getDescription() } ); //$NON-NLS-1$
}
- else if ( info != null && info instanceof ICDIWatchpointTrigger ) {
+ else if ( info instanceof ICDIWatchpointTrigger ) {
reason = MessageFormat.format( CDebugUIMessages.getString( "CDTDebugModelPresentation.14" ), new String[]{ ((ICDIWatchpointTrigger)info).getOldValue(), ((ICDIWatchpointTrigger)info).getNewValue() } ); //$NON-NLS-1$
}
- else if ( info != null && info instanceof ICDIWatchpointScope ) {
+ else if ( info instanceof ICDIWatchpointScope ) {
reason = CDebugUIMessages.getString( "CDTDebugModelPresentation.15" ); //$NON-NLS-1$
}
- else if ( info != null && info instanceof ICDIBreakpointHit ) {
+ else if ( info instanceof ICDIBreakpointHit ) {
reason = CDebugUIMessages.getString( "CDTDebugModelPresentation.16" ); //$NON-NLS-1$
}
- else if ( info != null && info instanceof ICDISharedLibraryEvent ) {
+ else if ( info instanceof ICDISharedLibraryEvent ) {
reason = CDebugUIMessages.getString( "CDTDebugModelPresentation.17" ); //$NON-NLS-1$
}
+ else if ( info instanceof ICDIEventBreakpointHit ) {
+ reason = MessageFormat.format( CDebugUIMessages.getString( "CDTDebugModelPresentation.20" ), new String[]{ ((ICDIEventBreakpointHit)info).getEventBreakpointType() } ); //$NON-NLS-1$
+ }
}
return MessageFormat.format( CDebugUIMessages.getString( "CDTDebugModelPresentation.18" ), new String[] { thread.getName(), reason } ); //$NON-NLS-1$
}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugUIMessages.properties b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugUIMessages.properties
index d2daff37156..037260f3cab 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugUIMessages.properties
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugUIMessages.properties
@@ -25,6 +25,7 @@ CDTDebugModelPresentation.9=Thread [{0}] (Terminated)
CDTDebugModelPresentation.4=<Error. {0}>
CDTDebugModelPresentation.10=Thread [{0}] (Stepping)
CDTDebugModelPresentation.11=Thread [{0}] (Running)
+CDTDebugModelPresentation.12=signal
CDTDebugModelPresentation.13=: Signal ''{0}'' received. Description: {1}.
CDTDebugModelPresentation.14=: Watchpoint triggered. Old value: ''{0}''. New value: ''{1}''.
CDTDebugModelPresentation.15=: Watchpoint is out of scope.
@@ -32,7 +33,7 @@ CDTDebugModelPresentation.16=: Breakpoint hit.
CDTDebugModelPresentation.17=: Shared library event.
CDTDebugModelPresentation.18=Thread [{0}] (Suspended{1})
CDTDebugModelPresentation.19=Thread [{0}]
-CDTDebugModelPresentation.12=signal
+CDTDebugModelPresentation.20=: Event breakpoint hit [{0}].
CDTDebugModelPresentation.21=<symbol is not available>
CDTDebugModelPresentation.22=(disabled)
CDTDebugModelPresentation.23=Infinity

Back to the top