Index:
ChangeLog =================================================================== RCS
file: /home/tools/org.eclipse.cdt.debug.core/ChangeLog,v retrieving revision
1.162 diff -u -r1.162 ChangeLog --- ChangeLog 9 Apr 2003 22:01:39
-0000 1.162 +++ ChangeLog 11 Apr 2003 22:28:12 -0000 @@ -1,3
+1,11 @@ +2003-04-11 Mikhail Khodjaiants + Core support of function
and method breakpoints. + * CDebugModel.java + *
ICFunctionBreakpoint.java + * CDebugUtils.java + *
CFunctionBreakpoint.java + * CDebugTarget.java + 2003-04-09
Mikhail Khodjaiants Core support of function
breakpoints. * CDebugModel.java Index:
src/org/eclipse/cdt/debug/core/CDebugModel.java =================================================================== RCS
file:
/home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java,v retrieving
revision 1.43 diff -u -r1.43 CDebugModel.java ---
src/org/eclipse/cdt/debug/core/CDebugModel.java 10 Apr 2003 22:09:26
-0000 1.43 +++ src/org/eclipse/cdt/debug/core/CDebugModel.java 11
Apr 2003 22:28:12 -0000 @@ -11,8 +11,8 @@ import
org.eclipse.cdt.core.model.CModelException; import
org.eclipse.cdt.core.model.IFunction; +import
org.eclipse.cdt.core.model.IMethod; import
org.eclipse.cdt.core.model.ISourceRange; -import
org.eclipse.cdt.core.model.ITranslationUnit; import
org.eclipse.cdt.debug.core.cdi.CDIException; import
org.eclipse.cdt.debug.core.cdi.ICDIConfiguration; import
org.eclipse.cdt.debug.core.cdi.ICDILocation; @@ -381,9 +381,9
@@ ICFunctionBreakpoint breakpoint =
(ICFunctionBreakpoint)breakpoints[i]; if (
breakpoint.getMarker().getType().equals( markerType )
) { - if (
breakpoint.getMarker().getResource().equals( getFunctionResource( function ) )
) + if ( breakpoint.getMarker().getResource().equals(
CDebugUtils.getFunctionResource( function ) )
) { - if (
breakpoint.getFunction() != null && breakpoint.getFunction().equals(
function.getElementName() ) ) + if (
breakpoint.getFunction() != null && breakpoint.getFunction().equals(
CDebugUtils.getFunctionName( function ) )
) { return
breakpoint; } @@ -423,11 +423,75
@@ attributes.put( IMarker.CHAR_START, new Integer(
charStart ) ); attributes.put( IMarker.CHAR_END, new
Integer( charEnd ) ); attributes.put( IMarker.LINE_NUMBER,
new Integer( lineNumber ) ); - attributes.put(
ICFunctionBreakpoint.FUNCTION, function.getElementName()
); + attributes.put( ICFunctionBreakpoint.FUNCTION,
CDebugUtils.getFunctionName( function ) ); attributes.put(
ICBreakpoint.ENABLED, new Boolean( enabled )
); attributes.put( ICBreakpoint.IGNORE_COUNT, new Integer(
ignoreCount ) ); attributes.put( ICBreakpoint.CONDITION,
condition ); - return new CFunctionBreakpoint(
getFunctionResource( function ), attributes, add ); + return new
CFunctionBreakpoint( CDebugUtils.getFunctionResource( function ), attributes,
add ); + } + + public static ICFunctionBreakpoint
methodBreakpointExists( IMethod method ) throws
CoreException + { + String modelId =
getPluginIdentifier(); + String markerType =
CFunctionBreakpoint.getMarkerType(); + IBreakpointManager manager
= DebugPlugin.getDefault().getBreakpointManager(); + IBreakpoint[]
breakpoints = manager.getBreakpoints( modelId ); + for ( int i =
0; i < breakpoints.length; i++ ) + { + if (
!( breakpoints[i] instanceof ICFunctionBreakpoint )
) + { + continue; + } + ICFunctionBreakpoint
breakpoint = (ICFunctionBreakpoint)breakpoints[i]; + if (
breakpoint.getMarker().getType().equals( markerType )
) + { + if (
breakpoint.getMarker().getResource().equals( CDebugUtils.getMethodResource(
method ) ) ) + { + if
( breakpoint.getFunction() != null && breakpoint.getFunction().equals(
CDebugUtils.getMethodQualifiedName( method ) )
) + { + return
breakpoint; + } + } + } + } + return
null; + } + + public static ICFunctionBreakpoint
createMethodBreakpoint( IMethod method,
+
boolean
enabled, +
int ignoreCount,
+
String condition,
+
boolean add ) throws DebugException + { + HashMap
attributes = new HashMap( 10 ); + attributes.put( ICBreakpoint.ID,
getPluginIdentifier() ); + int lineNumber =
-1; + int charStart = -1; + int charEnd =
-1; + try + { + ISourceRange
sourceRange = method.getSourceRange(); + if ( sourceRange !=
null ) + { + charStart =
sourceRange.getStartPos(); + charEnd = charStart +
sourceRange.getLength(); + // for
now + if ( charEnd == 0
) + lineNumber =
sourceRange.getStartLine(); + } + } + catch(
CModelException e
) + { + CDebugCorePlugin.log( e.getStatus()
); + } + attributes.put( IMarker.CHAR_START, new
Integer( charStart ) ); + attributes.put( IMarker.CHAR_END, new
Integer( charEnd ) ); + attributes.put( IMarker.LINE_NUMBER, new
Integer( lineNumber ) ); + attributes.put(
ICFunctionBreakpoint.FUNCTION, CDebugUtils.getMethodQualifiedName( method )
); + attributes.put( ICBreakpoint.ENABLED, new Boolean( enabled )
); + attributes.put( ICBreakpoint.IGNORE_COUNT, new Integer(
ignoreCount ) ); + attributes.put( ICBreakpoint.CONDITION,
condition ); + return new CFunctionBreakpoint(
CDebugUtils.getMethodResource( method ), attributes, add
); } public static ICWatchpoint
watchpointExists( IResource resource, boolean write, boolean read, String
_expression_ ) throws CoreException @@ -597,11 +661,5
@@
null )
); } } - } - - private
static IResource getFunctionResource( IFunction function
) - { - ITranslationUnit tu =
function.getTranslationUnit(); - return ( tu != null ) ?
tu.getResource() :
function.getCProject().getProject(); } } Index:
src/org/eclipse/cdt/debug/core/model/ICFunctionBreakpoint.java =================================================================== RCS
file:
/home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICFunctionBreakpoint.java,v retrieving
revision 1.2 diff -u -r1.2 ICFunctionBreakpoint.java ---
src/org/eclipse/cdt/debug/core/model/ICFunctionBreakpoint.java 9 Apr 2003
22:01:39 -0000 1.2 +++
src/org/eclipse/cdt/debug/core/model/ICFunctionBreakpoint.java 11 Apr 2003
22:28:12 -0000 @@ -39,4 +39,6 @@ * on this breakpoint's
underlying marker */ public void setFunction(
String function ) throws CoreException; + + public String
getFileName() throws CoreException; } Index:
src/org/eclipse/cdt/debug/internal/core/CDebugUtils.java =================================================================== RCS
file:
/home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CDebugUtils.java,v retrieving
revision 1.9 diff -u -r1.9 CDebugUtils.java ---
src/org/eclipse/cdt/debug/internal/core/CDebugUtils.java 18 Feb 2003
19:24:08 -0000 1.9 +++
src/org/eclipse/cdt/debug/internal/core/CDebugUtils.java 11 Apr 2003
22:28:12 -0000 @@ -14,7 +14,11 @@ import
org.apache.xml.serialize.OutputFormat; import
org.apache.xml.serialize.Serializer; import
org.apache.xml.serialize.SerializerFactory; +import
org.eclipse.cdt.core.model.IFunction; +import
org.eclipse.cdt.core.model.IMethod; +import
org.eclipse.cdt.core.model.ITranslationUnit; import
org.eclipse.core.resources.IProject; +import
org.eclipse.core.resources.IResource; import
org.eclipse.core.runtime.CoreException; import
org.eclipse.core.runtime.IStatus; import
org.eclipse.debug.core.DebugPlugin; @@ -288,5 +292,48
@@ Serializer serializer =
SerializerFactory.getSerializerFactory( Method.XML ).makeSerializer( new
OutputStreamWriter( s, "UTF8" ), format
); serializer.asDOMSerializer().serialize( doc
); return s.toString( "UTF8" );
//$NON-NLS-1$ + } + + + public static
IResource getFunctionResource( IFunction function
) + { + ITranslationUnit tu =
function.getTranslationUnit(); + return ( tu != null ) ?
tu.getResource() :
function.getCProject().getProject(); + } + + public static
IResource getMethodResource( IMethod method
) + { + ITranslationUnit tu =
method.getTranslationUnit(); + return ( tu != null ) ?
tu.getResource() :
method.getCProject().getProject(); + } + + public static
String getFunctionName( IFunction function
) + { + StringBuffer name = new StringBuffer(
function.getElementName() ); + if ( name.indexOf( "::" ) != -1
) + { + String[] params =
function.getParameterTypes(); + name.append( '('
); + if ( params.length == 0
) + { + name.append( "void" );
+ } + else + { + for
( int i = 0; i < params.length; ++i
) + { + name.append(
params[i] ); + if ( i != params.length - 1
) + name.append( ',' );
+ } + } + name.append(
')' ); + } + return
name.toString(); + } + + public static String
getMethodQualifiedName( IMethod method ) + { + return
null; } } Index:
src/org/eclipse/cdt/debug/internal/core/breakpoints/CFunctionBreakpoint.java =================================================================== RCS
file:
/home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/breakpoints/CFunctionBreakpoint.java,v retrieving
revision 1.7 diff -u -r1.7 CFunctionBreakpoint.java ---
src/org/eclipse/cdt/debug/internal/core/breakpoints/CFunctionBreakpoint.java 29
Jan 2003 22:19:59 -0000 1.7 +++
src/org/eclipse/cdt/debug/internal/core/breakpoints/CFunctionBreakpoint.java 11
Apr 2003 22:28:12 -0000 @@ -8,6 +8,7 @@ import
java.util.Map; import
org.eclipse.cdt.debug.core.model.ICFunctionBreakpoint; +import
org.eclipse.core.resources.IFile; import
org.eclipse.core.resources.IMarker; import
org.eclipse.core.resources.IResource; import
org.eclipse.core.runtime.CoreException; @@ -91,5 +92,18
@@ public static String
getMarkerType() { return
C_FUNCTION_BREAKPOINT; + } + + /* (non-Javadoc) + *
@see
org.eclipse.cdt.debug.core.model.ICFunctionBreakpoint#getFileName() +
*/ + public String getFileName() throws
CoreException + { + IResource resource =
ensureMarker().getResource(); + if ( resource instanceof IFile
) + { + return
((IFile)resource).getLocation().lastSegment(); + } + return
null; } } Index:
src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java =================================================================== RCS
file:
/home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java,v retrieving
revision 1.93 diff -u -r1.93 CDebugTarget.java ---
src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java 9 Apr 2003
22:01:39 -0000 1.93 +++
src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java 11 Apr 2003
22:28:13 -0000 @@ -1976,7 +1976,9 @@ private synchronized
ICDIBreakpoint setFunctionBreakpoint0( ICFunctionBreakpoint breakpoint ) throws
CDIException,
CoreException { ICDIBreakpointManager bm =
getCDISession().getBreakpointManager(); - ICDILocation location =
bm.createLocation( null, breakpoint.getFunction(), -1 ); + String
function = breakpoint.getFunction(); + String fileName = (
function != null && function.indexOf( "::" ) == -1 ) ?
breakpoint.getFileName() : null; + ICDILocation location =
bm.createLocation( fileName, function, -1 ); ICDICondition
condition = bm.createCondition( breakpoint.getIgnoreCount(),
breakpoint.getCondition() ); ICDIBreakpoint cdiBreakpoint =
bm.setLocationBreakpoint( ICDIBreakpoint.REGULAR, location, condition, null
); getBreakpoints().put( breakpoint, cdiBreakpoint
);
|