mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-05 08:46:02 +02:00
Added support for breakpoint problem markers, bug 170027.
This commit is contained in:
parent
fe6d691b73
commit
f3e2d73cd2
8 changed files with 370 additions and 8 deletions
|
@ -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();
|
||||||
|
}
|
|
@ -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();
|
||||||
|
|
||||||
|
}
|
|
@ -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
|
# All rights reserved. This program and the accompanying materials
|
||||||
# are made available under the terms of the Eclipse Public License v1.0
|
# are made available under the terms of the Eclipse Public License v1.0
|
||||||
# which accompanies this distribution, and is available at
|
# which accompanies this distribution, and is available at
|
||||||
|
@ -7,7 +7,8 @@
|
||||||
#
|
#
|
||||||
# Contributors:
|
# Contributors:
|
||||||
# QNX Software Systems - Initial API and implementation
|
# 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
|
pluginName=C/C++ Development Tools Debug Model
|
||||||
providerName=Eclipse.org
|
providerName=Eclipse.org
|
||||||
|
@ -18,6 +19,7 @@ cLineBreakpoints.name=C/C++ Line Breakpoints
|
||||||
cAddressBreakpoints.name=C/C++ Address Breakpoints
|
cAddressBreakpoints.name=C/C++ Address Breakpoints
|
||||||
cFunctionBreakpoints.name=C/C++ Function Breakpoints
|
cFunctionBreakpoints.name=C/C++ Function Breakpoints
|
||||||
cWatchpoints.name=C/C++ Watchpoints
|
cWatchpoints.name=C/C++ Watchpoints
|
||||||
|
breakpointProblem.name=C/C++ Breakpoint Problem
|
||||||
|
|
||||||
containerName.mapping=Path Mapping
|
containerName.mapping=Path Mapping
|
||||||
containerDescription.mapping=A path mapping.
|
containerDescription.mapping=A path mapping.
|
||||||
|
|
|
@ -97,6 +97,21 @@
|
||||||
name="org.eclipse.cdt.debug.core.read">
|
name="org.eclipse.cdt.debug.core.read">
|
||||||
</attribute>
|
</attribute>
|
||||||
</extension>
|
</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
|
<extension
|
||||||
point="org.eclipse.debug.core.breakpoints">
|
point="org.eclipse.debug.core.breakpoints">
|
||||||
<breakpoint
|
<breakpoint
|
||||||
|
|
|
@ -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
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -7,7 +7,8 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* QNX Software Systems - Initial API and implementation
|
* 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;
|
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.ICDIFunctionLocation;
|
||||||
import org.eclipse.cdt.debug.core.cdi.ICDILineLocation;
|
import org.eclipse.cdt.debug.core.cdi.ICDILineLocation;
|
||||||
import org.eclipse.cdt.debug.core.cdi.ICDILocator;
|
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.ICDIChangedEvent;
|
||||||
import org.eclipse.cdt.debug.core.cdi.event.ICDICreatedEvent;
|
import org.eclipse.cdt.debug.core.cdi.event.ICDICreatedEvent;
|
||||||
import org.eclipse.cdt.debug.core.cdi.event.ICDIDestroyedEvent;
|
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.ICThread;
|
||||||
import org.eclipse.cdt.debug.core.model.ICWatchpoint;
|
import org.eclipse.cdt.debug.core.model.ICWatchpoint;
|
||||||
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator;
|
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.breakpoints.CBreakpoint;
|
||||||
import org.eclipse.cdt.debug.internal.core.model.CDebugTarget;
|
import org.eclipse.cdt.debug.internal.core.model.CDebugTarget;
|
||||||
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
|
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IMarker;
|
||||||
import org.eclipse.core.resources.IMarkerDelta;
|
import org.eclipse.core.resources.IMarkerDelta;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
|
@ -235,6 +240,8 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
|
||||||
private BreakpointMap fMap;
|
private BreakpointMap fMap;
|
||||||
|
|
||||||
private boolean fSkipBreakpoint = false;
|
private boolean fSkipBreakpoint = false;
|
||||||
|
|
||||||
|
private ArrayList fBreakpointProblems = new ArrayList();
|
||||||
|
|
||||||
public CBreakpointManager( CDebugTarget target ) {
|
public CBreakpointManager( CDebugTarget target ) {
|
||||||
super();
|
super();
|
||||||
|
@ -347,6 +354,14 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
|
||||||
if ( source instanceof ICDIBreakpoint )
|
if ( source instanceof ICDIBreakpoint )
|
||||||
handleBreakpointChangedEvent( (ICDIBreakpoint)source );
|
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 {
|
try {
|
||||||
|
BreakpointProblems.removeProblemsForResolvedBreakpoint(breakpoint, getDebugTarget().getInternalID());
|
||||||
breakpoint.setTargetFilter( getDebugTarget() );
|
breakpoint.setTargetFilter( getDebugTarget() );
|
||||||
((CBreakpoint)breakpoint).register( true );
|
((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 ) {
|
private void handleBreakpointChangedEvent( ICDIBreakpoint cdiBreakpoint ) {
|
||||||
ICBreakpoint breakpoint = getBreakpointMap().getCBreakpoint( cdiBreakpoint );
|
ICBreakpoint breakpoint = getBreakpointMap().getCBreakpoint( cdiBreakpoint );
|
||||||
if ( breakpoint != null ) {
|
if ( breakpoint != null ) {
|
||||||
|
@ -525,6 +574,9 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
|
||||||
catch( CoreException e ) {
|
catch( CoreException e ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
BreakpointProblems.removeProblemsForBreakpoint(breakpoint);
|
||||||
|
} catch (CoreException e) {}
|
||||||
getBreakpointNotifier().breakpointsRemoved( getDebugTarget(), new IBreakpoint[] { breakpoint } );
|
getBreakpointNotifier().breakpointsRemoved( getDebugTarget(), new IBreakpoint[] { breakpoint } );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -557,6 +609,13 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
getBreakpointNotifier().breakpointsRemoved( getDebugTarget(), breakpoints );
|
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 ) {
|
private ICBreakpoint[] register( IBreakpoint[] breakpoints ) {
|
||||||
|
@ -594,6 +653,7 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
|
||||||
String fileName = breakpoint.getFileName();
|
String fileName = breakpoint.getFileName();
|
||||||
ICDIFunctionLocation location = cdiTarget.createFunctionLocation( fileName, function );
|
ICDIFunctionLocation location = cdiTarget.createFunctionLocation( fileName, function );
|
||||||
ICDICondition condition = createCondition( breakpoint );
|
ICDICondition condition = createCondition( breakpoint );
|
||||||
|
fBreakpointProblems.add(BreakpointProblems.reportUnresolvedBreakpoint(breakpoint, getDebugTarget().getName(), getDebugTarget().getInternalID()));
|
||||||
b = cdiTarget.setFunctionBreakpoint( ICDIBreakpoint.REGULAR, location, condition, true );
|
b = cdiTarget.setFunctionBreakpoint( ICDIBreakpoint.REGULAR, location, condition, true );
|
||||||
} else if ( breakpoints[i] instanceof ICAddressBreakpoint ) {
|
} else if ( breakpoints[i] instanceof ICAddressBreakpoint ) {
|
||||||
ICAddressBreakpoint breakpoint = (ICAddressBreakpoint)breakpoints[i];
|
ICAddressBreakpoint breakpoint = (ICAddressBreakpoint)breakpoints[i];
|
||||||
|
@ -607,6 +667,7 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
|
||||||
IPath path = convertPath( handle );
|
IPath path = convertPath( handle );
|
||||||
ICDILineLocation location = cdiTarget.createLineLocation( path.toPortableString(), breakpoint.getLineNumber() );
|
ICDILineLocation location = cdiTarget.createLineLocation( path.toPortableString(), breakpoint.getLineNumber() );
|
||||||
ICDICondition condition = createCondition( breakpoint );
|
ICDICondition condition = createCondition( breakpoint );
|
||||||
|
fBreakpointProblems.add(BreakpointProblems.reportUnresolvedBreakpoint(breakpoint, getDebugTarget().getName(), getDebugTarget().getInternalID()));
|
||||||
b = cdiTarget.setLineBreakpoint( ICDIBreakpoint.REGULAR, location, condition, true );
|
b = cdiTarget.setLineBreakpoint( ICDIBreakpoint.REGULAR, location, condition, true );
|
||||||
} else if ( breakpoints[i] instanceof ICWatchpoint ) {
|
} else if ( breakpoints[i] instanceof ICWatchpoint ) {
|
||||||
ICWatchpoint watchpoint = (ICWatchpoint)breakpoints[i];
|
ICWatchpoint watchpoint = (ICWatchpoint)breakpoints[i];
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* QNX Software Systems - Initial API and implementation
|
* 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;
|
package org.eclipse.cdt.debug.internal.core.model;
|
||||||
|
|
||||||
|
@ -224,6 +224,13 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
|
||||||
*/
|
*/
|
||||||
private CMemoryBlockRetrievalExtension fMemoryBlockRetrieval;
|
private CMemoryBlockRetrievalExtension fMemoryBlockRetrieval;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal ID that uniquely identifies this CDebugTarget.
|
||||||
|
*/
|
||||||
|
private String internalD = Integer.toString(lastInternalID++);
|
||||||
|
|
||||||
|
private static int lastInternalID = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for CDebugTarget.
|
* Constructor for CDebugTarget.
|
||||||
*/
|
*/
|
||||||
|
@ -1804,4 +1811,8 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
|
||||||
if ( mm != null )
|
if ( mm != null )
|
||||||
mm.loadSymbolsForAllModules();
|
mm.loadSymbolsForAllModules();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public String getInternalID() {
|
||||||
|
return internalD;
|
||||||
|
}
|
||||||
|
}
|
|
@ -72,11 +72,20 @@
|
||||||
</view>
|
</view>
|
||||||
<viewShortcut
|
<viewShortcut
|
||||||
id="org.eclipse.cdt.debug.ui.ModulesView">
|
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>
|
</viewShortcut>
|
||||||
<actionSet
|
<actionSet
|
||||||
id="org.eclipse.cdt.debug.ui.debugActionSet">
|
id="org.eclipse.cdt.debug.ui.debugActionSet">
|
||||||
</actionSet>
|
</actionSet>
|
||||||
</perspectiveExtension>
|
</perspectiveExtension>
|
||||||
</extension>
|
</extension>
|
||||||
<extension
|
<extension
|
||||||
point="org.eclipse.ui.preferencePages">
|
point="org.eclipse.ui.preferencePages">
|
||||||
|
|
Loading…
Add table
Reference in a new issue