Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/debug
diff options
context:
space:
mode:
authorKen Ryall2007-01-31 15:16:00 -0500
committerKen Ryall2007-01-31 15:16:00 -0500
commitf3e2d73cd294b203a4464499144e21872dfa0618 (patch)
tree6c2c1c1b11a2cb1d9db333c9114d2a54a63b076d /debug
parentfe6d691b73a56f94bfb629a3b72eec4dffe250c1 (diff)
downloadorg.eclipse.cdt-f3e2d73cd294b203a4464499144e21872dfa0618.tar.gz
org.eclipse.cdt-f3e2d73cd294b203a4464499144e21872dfa0618.tar.xz
org.eclipse.cdt-f3e2d73cd294b203a4464499144e21872dfa0618.zip
Added support for breakpoint problem markers, bug 170027.
Diffstat (limited to 'debug')
-rw-r--r--debug/org.eclipse.cdt.debug.core/cdi/org/eclipse/cdt/debug/core/cdi/event/ICDIBreakpointMovedEvent.java26
-rw-r--r--debug/org.eclipse.cdt.debug.core/cdi/org/eclipse/cdt/debug/core/cdi/event/ICDIBreakpointProblemEvent.java57
-rw-r--r--debug/org.eclipse.cdt.debug.core/plugin.properties6
-rw-r--r--debug/org.eclipse.cdt.debug.core/plugin.xml15
-rw-r--r--debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CBreakpointManager.java65
-rw-r--r--debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/breakpoints/BreakpointProblems.java181
-rw-r--r--debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java17
-rw-r--r--debug/org.eclipse.cdt.debug.ui/plugin.xml11
8 files changed, 370 insertions, 8 deletions
diff --git a/debug/org.eclipse.cdt.debug.core/cdi/org/eclipse/cdt/debug/core/cdi/event/ICDIBreakpointMovedEvent.java b/debug/org.eclipse.cdt.debug.core/cdi/org/eclipse/cdt/debug/core/cdi/event/ICDIBreakpointMovedEvent.java
new file mode 100644
index 00000000000..4329e90ad1c
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.core/cdi/org/eclipse/cdt/debug/core/cdi/event/ICDIBreakpointMovedEvent.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Nokia 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:
+ * Nokia - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.debug.core.cdi.event;
+
+import org.eclipse.cdt.debug.core.cdi.ICDILocator;
+
+/**
+ *
+ * Notifies that a breakpoint has changed location.
+ */
+
+public interface ICDIBreakpointMovedEvent extends ICDIEvent {
+
+ /** Returns the new location for the breakpoint.
+ * @return the breakpoint's new location.
+ */
+ ICDILocator getNewLocation();
+}
diff --git a/debug/org.eclipse.cdt.debug.core/cdi/org/eclipse/cdt/debug/core/cdi/event/ICDIBreakpointProblemEvent.java b/debug/org.eclipse.cdt.debug.core/cdi/org/eclipse/cdt/debug/core/cdi/event/ICDIBreakpointProblemEvent.java
new file mode 100644
index 00000000000..827fbd73730
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.core/cdi/org/eclipse/cdt/debug/core/cdi/event/ICDIBreakpointProblemEvent.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Nokia 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:
+ * Nokia - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.debug.core.cdi.event;
+
+import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
+
+/**
+ *
+ * Notifies that a breakpoint problem has occurred.
+ */
+public interface ICDIBreakpointProblemEvent {
+
+ /** The problem type is a string that identifies specific
+ * kinds of breakproblems.
+ * @return problem type name
+ */
+ String getProblemType();
+
+ /** The CDI breakpoint that has the problem
+ * @return the cdi breakpoint that has the problem
+ */
+ ICDIBreakpoint getBreakpoint();
+
+ /** A description of the problem.
+ * This will be presented in the problems view.
+ * @return a description of the problem
+ */
+ String getDescription();
+
+ /** The severity code maps to the IMarker.SEVERITY_XXX constants.
+ * @return severity code.
+ */
+ int getSeverity();
+
+ /** Indicated that existing problems of this type and at this
+ * breakpoint's location will be removed, no new ones will
+ * be added.
+ * @return only remove existing problems
+ */
+ boolean removeOnly();
+
+ /** Indicated that any existing problems of this type
+ * and at this breakpoint's location will be removed
+ * before the new problem is added.
+ * @return remove any existing markers
+ */
+ boolean removeExisting();
+
+}
diff --git a/debug/org.eclipse.cdt.debug.core/plugin.properties b/debug/org.eclipse.cdt.debug.core/plugin.properties
index 1fe0ca2488f..7c79e03bdd2 100644
--- a/debug/org.eclipse.cdt.debug.core/plugin.properties
+++ b/debug/org.eclipse.cdt.debug.core/plugin.properties
@@ -1,5 +1,5 @@
###############################################################################
-# Copyright (c) 2000, 2006 QNX Software Systems and others.
+# Copyright (c) 2000, 2007 QNX Software Systems 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
@@ -7,7 +7,8 @@
#
# Contributors:
# QNX Software Systems - Initial API and implementation
-# Nokia - Added support for AbsoluteSourceContainer( 159833 )
+# Ken Ryall (Nokia) - Added support for AbsoluteSourceContainer( 159833 )
+# Ken Ryall (Nokia) - Added support for breakpoint problems( 170027 )
###############################################################################
pluginName=C/C++ Development Tools Debug Model
providerName=Eclipse.org
@@ -18,6 +19,7 @@ cLineBreakpoints.name=C/C++ Line Breakpoints
cAddressBreakpoints.name=C/C++ Address Breakpoints
cFunctionBreakpoints.name=C/C++ Function Breakpoints
cWatchpoints.name=C/C++ Watchpoints
+breakpointProblem.name=C/C++ Breakpoint Problem
containerName.mapping=Path Mapping
containerDescription.mapping=A path mapping.
diff --git a/debug/org.eclipse.cdt.debug.core/plugin.xml b/debug/org.eclipse.cdt.debug.core/plugin.xml
index e0c2c26b605..e8e5214c89e 100644
--- a/debug/org.eclipse.cdt.debug.core/plugin.xml
+++ b/debug/org.eclipse.cdt.debug.core/plugin.xml
@@ -98,6 +98,21 @@
</attribute>
</extension>
<extension
+ id="breakpointproblem"
+ name="%breakpointProblem.name"
+ point="org.eclipse.core.resources.markers">
+ <super
+ type="org.eclipse.core.resources.problemmarker">
+ </super>
+ <super
+ type="org.eclipse.core.resources.textmarker">
+ </super>
+ <persistent
+ value="false">
+ </persistent>
+ <attribute name="externalLocation"/>
+ </extension>
+ <extension
point="org.eclipse.debug.core.breakpoints">
<breakpoint
class="org.eclipse.cdt.debug.internal.core.breakpoints.CLineBreakpoint"
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CBreakpointManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CBreakpointManager.java
index a0899a4f45f..88a87b12c29 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CBreakpointManager.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CBreakpointManager.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004, 2006 QNX Software Systems and others.
+ * Copyright (c) 2004, 2007 QNX Software Systems 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
@@ -7,7 +7,8 @@
*
* Contributors:
* QNX Software Systems - Initial API and implementation
- * Matthias Spycher (matthias@coware.com) - patch for bug #112008
+ * Matthias Spycher (matthias@coware.com) - patch for bug #112008
+ * Ken Ryall (Nokia) - bug 170027
*******************************************************************************/
package org.eclipse.cdt.debug.internal.core;
@@ -31,6 +32,8 @@ import org.eclipse.cdt.debug.core.cdi.ICDICondition;
import org.eclipse.cdt.debug.core.cdi.ICDIFunctionLocation;
import org.eclipse.cdt.debug.core.cdi.ICDILineLocation;
import org.eclipse.cdt.debug.core.cdi.ICDILocator;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIBreakpointMovedEvent;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIBreakpointProblemEvent;
import org.eclipse.cdt.debug.core.cdi.event.ICDIChangedEvent;
import org.eclipse.cdt.debug.core.cdi.event.ICDICreatedEvent;
import org.eclipse.cdt.debug.core.cdi.event.ICDIDestroyedEvent;
@@ -54,10 +57,12 @@ import org.eclipse.cdt.debug.core.model.ICLineBreakpoint;
import org.eclipse.cdt.debug.core.model.ICThread;
import org.eclipse.cdt.debug.core.model.ICWatchpoint;
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator;
+import org.eclipse.cdt.debug.internal.core.breakpoints.BreakpointProblems;
import org.eclipse.cdt.debug.internal.core.breakpoints.CBreakpoint;
import org.eclipse.cdt.debug.internal.core.model.CDebugTarget;
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IMarkerDelta;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
@@ -235,6 +240,8 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
private BreakpointMap fMap;
private boolean fSkipBreakpoint = false;
+
+ private ArrayList fBreakpointProblems = new ArrayList();
public CBreakpointManager( CDebugTarget target ) {
super();
@@ -347,6 +354,14 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
if ( source instanceof ICDIBreakpoint )
handleBreakpointChangedEvent( (ICDIBreakpoint)source );
}
+ else if ( event instanceof ICDIBreakpointMovedEvent ) {
+ if ( source instanceof ICDIBreakpoint )
+ handleBreakpointMovedEvent( (ICDIBreakpointMovedEvent) event );
+ }
+ else if ( event instanceof ICDIBreakpointProblemEvent ) {
+ if ( source instanceof ICDIBreakpoint )
+ handleBreakpointProblemEvent( (ICDIBreakpointProblemEvent) event );
+ }
}
}
}
@@ -442,6 +457,7 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
// }
try {
+ BreakpointProblems.removeProblemsForResolvedBreakpoint(breakpoint, getDebugTarget().getInternalID());
breakpoint.setTargetFilter( getDebugTarget() );
((CBreakpoint)breakpoint).register( true );
}
@@ -481,6 +497,39 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
}
}
+ private void handleBreakpointMovedEvent( ICDIBreakpointMovedEvent movedEvent )
+ {
+ ICBreakpoint breakpoint = getBreakpointMap().getCBreakpoint( (ICDIBreakpoint) movedEvent.getSource() );
+ if (breakpoint != null)
+ {
+ try {
+ int newLineNumber = movedEvent.getNewLocation().getLineNumber();
+ int currLineNumber = breakpoint.getMarker().getAttribute(IMarker.LINE_NUMBER, newLineNumber);
+ breakpoint.getMarker().setAttribute(IMarker.LINE_NUMBER, newLineNumber);
+ fBreakpointProblems.add(BreakpointProblems.reportBreakpointMoved(
+ breakpoint, currLineNumber, newLineNumber, getDebugTarget().getName(), getDebugTarget().getInternalID()));
+ } catch (CoreException e) {}
+ }
+
+ }
+
+ private void handleBreakpointProblemEvent( ICDIBreakpointProblemEvent problemEvent )
+ {
+ ICBreakpoint breakpoint = getBreakpointMap().getCBreakpoint( problemEvent.getBreakpoint() );
+ if (breakpoint != null)
+ {
+ try {
+ IMarker marker;
+ marker = BreakpointProblems.reportBreakpointProblem(breakpoint, problemEvent.getDescription(),
+ problemEvent.getSeverity(), problemEvent.getProblemType(), problemEvent.removeExisting(),
+ problemEvent.removeOnly(), getDebugTarget().getName(), getDebugTarget().getInternalID());
+ if (marker != null)
+ fBreakpointProblems.add(marker);
+ } catch (DebugException e) {}
+ }
+
+ }
+
private void handleBreakpointChangedEvent( ICDIBreakpoint cdiBreakpoint ) {
ICBreakpoint breakpoint = getBreakpointMap().getCBreakpoint( cdiBreakpoint );
if ( breakpoint != null ) {
@@ -525,6 +574,9 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
catch( CoreException e ) {
}
}
+ try {
+ BreakpointProblems.removeProblemsForBreakpoint(breakpoint);
+ } catch (CoreException e) {}
getBreakpointNotifier().breakpointsRemoved( getDebugTarget(), new IBreakpoint[] { breakpoint } );
}
}
@@ -557,6 +609,13 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
}
} );
getBreakpointNotifier().breakpointsRemoved( getDebugTarget(), breakpoints );
+ // Remove all breakpoint problem markers
+ for (Iterator iter = fBreakpointProblems.iterator(); iter.hasNext();) {
+ IMarker marker = (IMarker) iter.next();
+ try {
+ marker.delete();
+ } catch (CoreException e) {}
+ }
}
private ICBreakpoint[] register( IBreakpoint[] breakpoints ) {
@@ -594,6 +653,7 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
String fileName = breakpoint.getFileName();
ICDIFunctionLocation location = cdiTarget.createFunctionLocation( fileName, function );
ICDICondition condition = createCondition( breakpoint );
+ fBreakpointProblems.add(BreakpointProblems.reportUnresolvedBreakpoint(breakpoint, getDebugTarget().getName(), getDebugTarget().getInternalID()));
b = cdiTarget.setFunctionBreakpoint( ICDIBreakpoint.REGULAR, location, condition, true );
} else if ( breakpoints[i] instanceof ICAddressBreakpoint ) {
ICAddressBreakpoint breakpoint = (ICAddressBreakpoint)breakpoints[i];
@@ -607,6 +667,7 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
IPath path = convertPath( handle );
ICDILineLocation location = cdiTarget.createLineLocation( path.toPortableString(), breakpoint.getLineNumber() );
ICDICondition condition = createCondition( breakpoint );
+ fBreakpointProblems.add(BreakpointProblems.reportUnresolvedBreakpoint(breakpoint, getDebugTarget().getName(), getDebugTarget().getInternalID()));
b = cdiTarget.setLineBreakpoint( ICDIBreakpoint.REGULAR, location, condition, true );
} else if ( breakpoints[i] instanceof ICWatchpoint ) {
ICWatchpoint watchpoint = (ICWatchpoint)breakpoints[i];
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/breakpoints/BreakpointProblems.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/breakpoints/BreakpointProblems.java
new file mode 100644
index 00000000000..e7fb955e727
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/breakpoints/BreakpointProblems.java
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Nokia 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:
+ * Nokia - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.debug.internal.core.breakpoints;
+
+import java.text.MessageFormat;
+
+import org.eclipse.cdt.core.ProblemMarkerInfo;
+import org.eclipse.cdt.core.model.ICModelMarker;
+import org.eclipse.cdt.debug.core.CDebugCorePlugin;
+import org.eclipse.cdt.debug.core.model.ICBreakpoint;
+import org.eclipse.cdt.debug.core.model.ICLineBreakpoint;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+
+public class BreakpointProblems {
+
+ /**
+ * The identifier for breakpoint problem markers.
+ */
+ public static final String BREAKPOINT_PROBLEM_MARKER_ID = CDebugCorePlugin.PLUGIN_ID + ".breakpointproblem" ; //$NON-NLS-1$
+ /**
+ * Breakpoint problem marker types.
+ */
+ public static final String BREAKPOINT_PROBLEM_TYPE = "bp_problem_type"; //$NON-NLS-1$
+ public static final String UNRESOLVED = "unresolved"; //$NON-NLS-1$
+ public static final String BAD_CONDITION = "bad_condition"; //$NON-NLS-1$
+ public static final String MOVED = "moved"; //$NON-NLS-1$
+ public static final String BREAKPOINT_CONTEXT_NAME = "bp_context_name"; //$NON-NLS-1$
+ public static final String BREAKPOINT_CONTEXT_ID = "bp_context_id"; //$NON-NLS-1$
+
+ public static IMarker reportBreakpointMoved(ICBreakpoint breakpoint, int oldLineNumber, int newLineNumber, String contextName, String contextID) throws CoreException {
+ String message = MessageFormat.format("Breakpoint could not be set at line {0}, moved to line {1}", new Object[] { new Integer(oldLineNumber), new Integer(newLineNumber) });
+ IMarker marker = BreakpointProblems.reportBreakpointProblem(breakpoint, message, IMarker.SEVERITY_INFO, MOVED, true, false, contextName, contextID);
+ return marker;
+ }
+
+ public static IMarker reportUnresolvedBreakpoint(ICBreakpoint breakpoint, String contextName, String contextID) throws CoreException {
+ IMarker marker = BreakpointProblems.reportBreakpointProblem(breakpoint, "Unresolved breakpoint", IMarker.SEVERITY_WARNING, UNRESOLVED, true, false, contextName, contextID);
+ return marker;
+ }
+
+ public static void removeProblemsForBreakpoint(ICBreakpoint breakpoint) throws CoreException {
+ IMarker marker = breakpoint.getMarker();
+ if (marker != null)
+ {
+ int lineNumber = marker.getAttribute(IMarker.LINE_NUMBER, 0);
+ IResource bpResource = marker.getResource();
+ if (bpResource != null)
+ {
+ IMarker[] bpProblems = bpResource.findMarkers(BREAKPOINT_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+ for (int i = 0; i < bpProblems.length; i++) {
+ if (bpProblems[i].getAttribute(IMarker.LINE_NUMBER, 0) == lineNumber)
+ {
+ bpProblems[i].delete();
+ }
+ }
+ }
+ }
+
+ }
+
+ public static void removeProblemsForResolvedBreakpoint(ICBreakpoint breakpoint, String contextID) throws CoreException {
+ IMarker marker = breakpoint.getMarker();
+ if (marker != null)
+ {
+ int lineNumber = marker.getAttribute(IMarker.LINE_NUMBER, 0);
+ IResource bpResource = marker.getResource();
+ if (bpResource != null)
+ {
+ IMarker[] bpProblems = bpResource.findMarkers(BREAKPOINT_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+ for (int i = 0; i < bpProblems.length; i++) {
+ if (bpProblems[i].getAttribute(BREAKPOINT_PROBLEM_TYPE, "").equalsIgnoreCase(UNRESOLVED) &&
+ bpProblems[i].getAttribute(IMarker.LINE_NUMBER, 0) == lineNumber &&
+ bpProblems[i].getAttribute(BREAKPOINT_CONTEXT_ID, "").equals(contextID))
+ {
+ bpProblems[i].delete();
+ }
+ }
+ }
+ }
+
+ }
+
+ public static IMarker reportBreakpointProblem(ICBreakpoint breakpoint,
+ String description, int severity, String problemType, boolean removePrevious, boolean removeOnly, String contextName, String contextID) {
+ try {
+ if (breakpoint instanceof ICLineBreakpoint) {
+ ICLineBreakpoint lineBreakpoint = (ICLineBreakpoint) breakpoint;
+ IMarker marker = null;
+
+ if (removePrevious)
+ {
+ IMarker existingMarker = lineBreakpoint.getMarker();
+ if (existingMarker != null)
+ {
+ IResource bpResource = existingMarker.getResource();
+ if (bpResource != null)
+ {
+ int lineNumber = existingMarker.getAttribute(IMarker.LINE_NUMBER, 0);
+ IMarker[] bpProblems = bpResource.findMarkers(BREAKPOINT_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+ for (int i = 0; i < bpProblems.length; i++) {
+ if (bpProblems[i].getAttribute(BREAKPOINT_PROBLEM_TYPE, "").equalsIgnoreCase(problemType) &&
+ bpProblems[i].getAttribute(IMarker.LINE_NUMBER, 0) == lineNumber)
+ {
+ bpProblems[i].delete();
+ }
+ }
+ }
+ }
+ }
+
+ if (!removeOnly)
+ {
+ marker = reportBreakpointProblem(new ProblemMarkerInfo(
+ lineBreakpoint.getMarker().getResource(),
+ lineBreakpoint.getLineNumber(), description, severity,
+ ""));
+ marker.setAttribute(BREAKPOINT_PROBLEM_TYPE, problemType);
+ marker.setAttribute(BREAKPOINT_CONTEXT_NAME, contextName);
+ marker.setAttribute(BREAKPOINT_CONTEXT_ID, contextID);
+ }
+ return marker;
+ }
+ } catch (CoreException e) {
+ }
+ return null;
+ }
+
+ public static IMarker reportBreakpointProblem(ProblemMarkerInfo problemMarkerInfo)
+ {
+ IResource markerResource = problemMarkerInfo.file ;
+ if (markerResource==null) {
+ return null;
+ }
+ try {
+ IMarker[] cur = markerResource.findMarkers(BREAKPOINT_PROBLEM_MARKER_ID, true, IResource.DEPTH_ONE);
+
+ /*
+ * Try to find matching markers and don't put in duplicates
+ */
+ if ((cur != null) && (cur.length > 0)) {
+ for (int i = 0; i < cur.length; i++) {
+ int line = ((Integer) cur[i].getAttribute(IMarker.LOCATION)).intValue();
+ int sev = ((Integer) cur[i].getAttribute(IMarker.SEVERITY)).intValue();
+ String mesg = (String) cur[i].getAttribute(IMarker.MESSAGE);
+ if (line == problemMarkerInfo.lineNumber && sev == problemMarkerInfo.severity && mesg.equals(problemMarkerInfo.description)) {
+ return cur[i];
+ }
+ }
+ }
+
+ IMarker marker = markerResource.createMarker(BREAKPOINT_PROBLEM_MARKER_ID);
+ marker.setAttribute(IMarker.LOCATION, problemMarkerInfo.lineNumber);
+ marker.setAttribute(IMarker.MESSAGE, problemMarkerInfo.description);
+ marker.setAttribute(IMarker.SEVERITY, problemMarkerInfo.severity);
+ marker.setAttribute(IMarker.LINE_NUMBER, problemMarkerInfo.lineNumber);
+ marker.setAttribute(IMarker.CHAR_START, -1);
+ marker.setAttribute(IMarker.CHAR_END, -1);
+ if (problemMarkerInfo.variableName != null) {
+ marker.setAttribute(ICModelMarker.C_MODEL_MARKER_VARIABLE, problemMarkerInfo.variableName);
+ }
+ if (problemMarkerInfo.externalPath != null) {
+ marker.setAttribute(ICModelMarker.C_MODEL_MARKER_EXTERNAL_LOCATION, problemMarkerInfo.externalPath.toOSString());
+ }
+
+ return marker;
+
+ } catch (CoreException e) {}
+ return null;
+ }
+
+}
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 0d994c637ca..b5d69f0f546 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
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2006 QNX Software Systems and others.
+ * Copyright (c) 2000, 2007 QNX Software Systems 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
@@ -7,7 +7,7 @@
*
* Contributors:
* QNX Software Systems - Initial API and implementation
- * Ken Ryall (Nokia) - https://bugs.eclipse.org/bugs/show_bug.cgi?id=118894
+ * Ken Ryall (Nokia) - bugs 118894, 170027
*******************************************************************************/
package org.eclipse.cdt.debug.internal.core.model;
@@ -225,6 +225,13 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
private CMemoryBlockRetrievalExtension fMemoryBlockRetrieval;
/**
+ * Internal ID that uniquely identifies this CDebugTarget.
+ */
+ private String internalD = Integer.toString(lastInternalID++);
+
+ private static int lastInternalID = 1;
+
+ /**
* Constructor for CDebugTarget.
*/
public CDebugTarget( ILaunch launch, IProject project, ICDITarget cdiTarget, String name, IProcess debuggeeProcess, IBinaryObject file, boolean allowsTerminate, boolean allowsDisconnect) {
@@ -1804,4 +1811,8 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
if ( mm != null )
mm.loadSymbolsForAllModules();
}
-}
+
+ public String getInternalID() {
+ return internalD;
+ }
+} \ No newline at end of file
diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml
index 79dc3225fdd..6e261973f58 100644
--- a/debug/org.eclipse.cdt.debug.ui/plugin.xml
+++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml
@@ -73,10 +73,19 @@
<viewShortcut
id="org.eclipse.cdt.debug.ui.ModulesView">
</viewShortcut>
+ <view
+ visible="true"
+ relative="org.eclipse.ui.console.ConsoleView"
+ relationship="stack"
+ id="org.eclipse.ui.views.ProblemView">
+ </view>
+ <viewShortcut
+ id="org.eclipse.ui.views.ProblemView">
+ </viewShortcut>
<actionSet
id="org.eclipse.cdt.debug.ui.debugActionSet">
</actionSet>
- </perspectiveExtension>
+ </perspectiveExtension>
</extension>
<extension
point="org.eclipse.ui.preferencePages">

Back to the top