mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-21 16:05:25 +02:00
2005-04-25 Alain Magloire
* cdi/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManger.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/CdiResources.properties * cdi/org/eclipse/cdt/debug/mi/core/cdi/Location.java + cdi/org/eclipse/cdt/debug/mi/core/cdi/Locator.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/MI2CDIException.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/SharedLibraryManager.java + cdi/org/eclipse/cdt/debug/mi/core/cdi/model/AddressBreakpoint.java + cdi/org/eclipse/cdt/debug/mi/core/cdi/model/FunctionBreakpoint.java + cdi/org/eclipse/cdt/debug/mi/core/cdi/model/LineBreakpoint.java + cdi/org/eclipse/cdt/debug/mi/core/cdi/model/LocationBreakpoint.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Breakpoint.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Exceptionpoint.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/StackFrame.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Threa.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Watchpoint.java
This commit is contained in:
parent
838acedf59
commit
03f49cac54
17 changed files with 719 additions and 280 deletions
|
@ -1,3 +1,22 @@
|
|||
2005-04-25 Alain Magloire
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManger.java
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/CdiResources.properties
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/Location.java
|
||||
+ cdi/org/eclipse/cdt/debug/mi/core/cdi/Locator.java
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/MI2CDIException.java
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/SharedLibraryManager.java
|
||||
|
||||
+ cdi/org/eclipse/cdt/debug/mi/core/cdi/model/AddressBreakpoint.java
|
||||
+ cdi/org/eclipse/cdt/debug/mi/core/cdi/model/FunctionBreakpoint.java
|
||||
+ cdi/org/eclipse/cdt/debug/mi/core/cdi/model/LineBreakpoint.java
|
||||
+ cdi/org/eclipse/cdt/debug/mi/core/cdi/model/LocationBreakpoint.java
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Breakpoint.java
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Exceptionpoint.java
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/model/StackFrame.java
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Threa.java
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Watchpoint.java
|
||||
|
||||
2005-04-05 Alain Magloire
|
||||
PR 90090
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java
|
||||
|
|
|
@ -19,20 +19,31 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.debug.core.cdi.CDIException;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDIAddressLocation;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDICondition;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDILocation;
|
||||
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.model.ICDIAddressBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIExceptionpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDILocationBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIFunctionBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDILineBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint;
|
||||
import org.eclipse.cdt.debug.mi.core.MIException;
|
||||
import org.eclipse.cdt.debug.mi.core.MIFormat;
|
||||
import org.eclipse.cdt.debug.mi.core.MISession;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.AddressBreakpoint;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.Breakpoint;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.Exceptionpoint;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.FunctionBreakpoint;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.LineBreakpoint;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.LocationBreakpoint;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.Target;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.Watchpoint;
|
||||
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
|
||||
import org.eclipse.cdt.debug.mi.core.command.MIBreakAfter;
|
||||
import org.eclipse.cdt.debug.mi.core.command.MIBreakCondition;
|
||||
import org.eclipse.cdt.debug.mi.core.command.MIBreakDelete;
|
||||
import org.eclipse.cdt.debug.mi.core.command.MIBreakDisable;
|
||||
import org.eclipse.cdt.debug.mi.core.command.MIBreakEnable;
|
||||
|
@ -298,12 +309,22 @@ public class BreakpointManager extends Manager {
|
|||
boolean success = false;
|
||||
try {
|
||||
bpt.setCondition0(newCondition);
|
||||
setLocationBreakpoint(bpt);
|
||||
if (breakpoint instanceof LocationBreakpoint) {
|
||||
setLocationBreakpoint((LocationBreakpoint)bpt);
|
||||
} else if (breakpoint instanceof Watchpoint) {
|
||||
setWatchpoint((Watchpoint)breakpoint);
|
||||
} else {
|
||||
throw new CDIException(CdiResources.getString("cdi.BreakpointManager.Not_a_CDT_breakpoint")); //$NON-NLS-1$
|
||||
}
|
||||
success = true;
|
||||
} finally {
|
||||
if (!success) {
|
||||
bpt.setCondition0(oldCondition);
|
||||
setLocationBreakpoint(bpt);
|
||||
if (breakpoint instanceof LocationBreakpoint) {
|
||||
setLocationBreakpoint((LocationBreakpoint)bpt);
|
||||
} else if (breakpoint instanceof Watchpoint) {
|
||||
setWatchpoint((Watchpoint)breakpoint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -375,8 +396,8 @@ public class BreakpointManager extends Manager {
|
|||
allMIBreakpoints[i].getFunction(),
|
||||
allMIBreakpoints[i].getLine(),
|
||||
MIFormat.getBigInteger(allMIBreakpoints[i].getAddress()));
|
||||
|
||||
Breakpoint newBreakpoint = new Breakpoint(target, type, location, condition);
|
||||
// By default new breakpoint are LineBreakpoint
|
||||
Breakpoint newBreakpoint = new LineBreakpoint(target, type, location, condition);
|
||||
newBreakpoint.setMIBreakpoints(new MIBreakpoint[] {allMIBreakpoints[i]});
|
||||
bList.add(newBreakpoint);
|
||||
}
|
||||
|
@ -520,16 +541,44 @@ public class BreakpointManager extends Manager {
|
|||
return EMPTY_BREAKPOINTS;
|
||||
}
|
||||
|
||||
public ICDILocationBreakpoint setLocationBreakpoint(Target target, int type, ICDILocation location,
|
||||
ICDICondition condition, boolean deferred) throws CDIException {
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpointManagement#setLineBreakpoint(int, org.eclipse.cdt.debug.core.cdi.ICDILineLocation, org.eclipse.cdt.debug.core.cdi.ICDICondition, boolean)
|
||||
*/
|
||||
public ICDILineBreakpoint setLineBreakpoint(Target target, int type, ICDILineLocation location,
|
||||
ICDICondition condition, boolean deferred) throws CDIException {
|
||||
LineBreakpoint bkpt = new LineBreakpoint(target, type, location, condition);
|
||||
setNewLocationBreakpoint(bkpt, deferred);
|
||||
return bkpt;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpointManagement#setFunctionBreakpoint(int, org.eclipse.cdt.debug.core.cdi.ICDIFunctionLocation, org.eclipse.cdt.debug.core.cdi.ICDICondition, boolean)
|
||||
*/
|
||||
public ICDIFunctionBreakpoint setFunctionBreakpoint(Target target, int type, ICDIFunctionLocation location,
|
||||
ICDICondition condition, boolean deferred) throws CDIException {
|
||||
FunctionBreakpoint bkpt = new FunctionBreakpoint(target, type, location, condition);
|
||||
setNewLocationBreakpoint(bkpt, deferred);
|
||||
return bkpt;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpointManagement#setAddressBreakpoint(int, org.eclipse.cdt.debug.core.cdi.ICDIAddressLocation, org.eclipse.cdt.debug.core.cdi.ICDICondition, boolean)
|
||||
*/
|
||||
public ICDIAddressBreakpoint setAddressBreakpoint(Target target, int type, ICDIAddressLocation location,
|
||||
ICDICondition condition, boolean deferred) throws CDIException {
|
||||
AddressBreakpoint bkpt = new AddressBreakpoint(target, type, location, condition);
|
||||
setNewLocationBreakpoint(bkpt, deferred);
|
||||
return bkpt;
|
||||
}
|
||||
|
||||
|
||||
protected void setNewLocationBreakpoint(LocationBreakpoint bkpt, boolean deferred) throws CDIException {
|
||||
Target target = (Target)bkpt.getTarget();
|
||||
MISession miSession = target.getMISession();
|
||||
Breakpoint bkpt = new Breakpoint(target, type, location, condition);
|
||||
try {
|
||||
setLocationBreakpoint(bkpt);
|
||||
List blist = getBreakpointsList(target);
|
||||
blist.add(bkpt);
|
||||
// Force the reset of the location.
|
||||
bkpt.setLocation(null);
|
||||
|
||||
// Fire a created Event.
|
||||
MIBreakpoint[] miBreakpoints = bkpt.getMIBreakpoints();
|
||||
|
@ -553,87 +602,34 @@ public class BreakpointManager extends Manager {
|
|||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ICDIWatchpoint setWatchpoint(Target target, int type, int watchType, String expression,
|
||||
ICDICondition condition) throws CDIException {
|
||||
|
||||
// HACK: for the IDE,
|
||||
try {
|
||||
// Check if this an address watchpoint, and add a '*'
|
||||
Integer.decode(expression);
|
||||
expression = '*' + expression;
|
||||
} catch (NumberFormatException e) {
|
||||
//
|
||||
}
|
||||
Watchpoint bkpt = new Watchpoint(target, expression, type, watchType, condition);
|
||||
|
||||
setWatchpoint(bkpt);
|
||||
List bList = getBreakpointsList(target);
|
||||
bList.add(bkpt);
|
||||
|
||||
// Fire a created Event.
|
||||
MISession miSession = target.getMISession();
|
||||
MIBreakpoint[] miBreakpoints = bkpt.getMIBreakpoints();
|
||||
if (miBreakpoints != null && miBreakpoints.length > 0)
|
||||
miSession.fireEvent(new MIBreakpointCreatedEvent(miSession, miBreakpoints[0].getNumber()));
|
||||
return bkpt;
|
||||
}
|
||||
|
||||
MIBreakInsert[] createMIBreakInsert(Breakpoint bkpt) throws CDIException {
|
||||
boolean hardware = bkpt.isHardware();
|
||||
boolean temporary = bkpt.isTemporary();
|
||||
String exprCond = null;
|
||||
int ignoreCount = 0;
|
||||
String[] threadIds = null;
|
||||
StringBuffer line = new StringBuffer();
|
||||
|
||||
if (bkpt.getCondition() != null) {
|
||||
ICDICondition condition = bkpt.getCondition();
|
||||
exprCond = condition.getExpression();
|
||||
ignoreCount = condition.getIgnoreCount();
|
||||
threadIds = condition.getThreadIds();
|
||||
}
|
||||
|
||||
if (bkpt.getLocation() != null) {
|
||||
ICDILocation location = bkpt.getLocation();
|
||||
String file = location.getFile();
|
||||
String function = location.getFunction();
|
||||
if (file != null && file.length() > 0) {
|
||||
line.append(file).append(':');
|
||||
if (function != null && function.length() > 0) {
|
||||
// GDB does not seem to accept function arguments when
|
||||
// we use file name:
|
||||
// (gdb) break file.c:Test(int)
|
||||
// Will fail, altought it can accept this
|
||||
// (gdb) break file.c:main
|
||||
// so fall back to the line number or
|
||||
// just the name of the function if lineno is invalid.
|
||||
int paren = function.indexOf('(');
|
||||
if (paren != -1) {
|
||||
int no = location.getLineNumber();
|
||||
if (no <= 0) {
|
||||
String func = function.substring(0, paren);
|
||||
line.append(func);
|
||||
} else {
|
||||
line.append(no);
|
||||
}
|
||||
} else {
|
||||
line.append(function);
|
||||
}
|
||||
} else {
|
||||
line.append(location.getLineNumber());
|
||||
}
|
||||
} else if (function != null && function.length() > 0) {
|
||||
line.append(function);
|
||||
} else if (location.getLineNumber() != 0) {
|
||||
line.append(location.getLineNumber());
|
||||
} else {
|
||||
line.append('*').append(location.getAddress());
|
||||
}
|
||||
}
|
||||
|
||||
MIBreakInsert[] miBreakInserts;
|
||||
MISession miSession = ((Target)bkpt.getTarget()).getMISession();
|
||||
CommandFactory factory = miSession.getCommandFactory();
|
||||
if (threadIds == null || threadIds.length == 0) {
|
||||
MIBreakInsert bi = factory.createMIBreakInsert(temporary, hardware, exprCond, ignoreCount, line.toString(), 0);
|
||||
miBreakInserts = new MIBreakInsert[] { bi } ;
|
||||
} else {
|
||||
List list = new ArrayList(threadIds.length);
|
||||
for (int i = 0; i < threadIds.length; i++) {
|
||||
String threadId = threadIds[i];
|
||||
int tid = 0;
|
||||
if (threadId != null && threadId.length() > 0) {
|
||||
try {
|
||||
tid = Integer.parseInt(threadId);
|
||||
list.add(factory.createMIBreakInsert(temporary, hardware, exprCond, ignoreCount, line.toString(), tid));
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
miBreakInserts = (MIBreakInsert[]) list.toArray(new MIBreakInsert[list.size()]);
|
||||
}
|
||||
return miBreakInserts;
|
||||
}
|
||||
|
||||
public void setLocationBreakpoint (Breakpoint bkpt) throws CDIException {
|
||||
public void setLocationBreakpoint (LocationBreakpoint bkpt) throws CDIException {
|
||||
Target target = (Target)bkpt.getTarget();
|
||||
MISession miSession = target.getMISession();
|
||||
boolean state = suspendInferior(target);
|
||||
|
@ -690,21 +686,11 @@ public class BreakpointManager extends Manager {
|
|||
bkpt.setMIBreakpoints(allPoints);
|
||||
}
|
||||
|
||||
public ICDIWatchpoint setWatchpoint(Target target, int type, int watchType, String expression,
|
||||
ICDICondition condition) throws CDIException {
|
||||
|
||||
boolean access = ( (watchType & ICDIWatchpoint.WRITE) == ICDIWatchpoint.WRITE &&
|
||||
(watchType & ICDIWatchpoint.READ) == ICDIWatchpoint.READ );
|
||||
boolean read = ( !((watchType & ICDIWatchpoint.WRITE) == ICDIWatchpoint.WRITE) &&
|
||||
(watchType & ICDIWatchpoint.READ) == ICDIWatchpoint.READ );
|
||||
|
||||
try {
|
||||
// Check if this an address watchpoint, and add a '*'
|
||||
Integer.decode(expression);
|
||||
expression = '*' + expression;
|
||||
} catch (NumberFormatException e) {
|
||||
//
|
||||
}
|
||||
public void setWatchpoint(Watchpoint watchpoint) throws CDIException {
|
||||
Target target = (Target)watchpoint.getTarget();
|
||||
boolean access = watchpoint.isReadType() && watchpoint.isWriteType();
|
||||
boolean read = ! watchpoint.isWriteType() && watchpoint.isReadType();
|
||||
String expression = watchpoint.getWatchExpression();
|
||||
|
||||
MISession miSession = target.getMISession();
|
||||
boolean state = suspendInferior(target);
|
||||
|
@ -714,29 +700,52 @@ public class BreakpointManager extends Manager {
|
|||
MIBreakpoint[] points = null;
|
||||
try {
|
||||
miSession.postCommand(breakWatch);
|
||||
MIBreakWatchInfo info = breakWatch.getMIBreakWatchInfo();
|
||||
points = info.getMIBreakpoints();
|
||||
if (info == null) {
|
||||
MIBreakWatchInfo winfo = breakWatch.getMIBreakWatchInfo();
|
||||
if (winfo == null) {
|
||||
throw new CDIException(CdiResources.getString("cdi.Common.No_answer")); //$NON-NLS-1$
|
||||
}
|
||||
points = winfo.getMIBreakpoints();
|
||||
if (points == null || points.length == 0) {
|
||||
throw new CDIException(CdiResources.getString("cdi.BreakpointManager.Parsing_Error")); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
int no = points[0].getNumber();
|
||||
|
||||
// Put the condition now.
|
||||
String exprCond = null;
|
||||
int ignoreCount = 0;
|
||||
String[] threadIds = null;
|
||||
StringBuffer line = new StringBuffer();
|
||||
|
||||
ICDICondition condition = watchpoint.getCondition();
|
||||
if (condition != null) {
|
||||
exprCond = condition.getExpression();
|
||||
ignoreCount = condition.getIgnoreCount();
|
||||
threadIds = condition.getThreadIds();
|
||||
}
|
||||
if (exprCond != null && exprCond.length() > 0) {
|
||||
MIBreakCondition breakCondition = factory.createMIBreakCondition(no, exprCond);
|
||||
miSession.postCommand(breakCondition);
|
||||
MIInfo info = breakCondition.getMIInfo();
|
||||
if (info == null) {
|
||||
throw new CDIException(CdiResources.getString("cdi.Common.No_answer")); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
if (ignoreCount > 0) {
|
||||
MIBreakAfter breakAfter = factory.createMIBreakAfter(no, ignoreCount);
|
||||
miSession.postCommand(breakAfter);
|
||||
MIInfo info = breakAfter.getMIInfo();
|
||||
if (info == null) {
|
||||
throw new CDIException(CdiResources.getString("cdi.Common.No_answer")); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
// how to deal with threads ???
|
||||
} catch (MIException e) {
|
||||
throw new MI2CDIException(e);
|
||||
} finally {
|
||||
resumeInferior(target, state);
|
||||
}
|
||||
Watchpoint bkpt = new Watchpoint(target, expression, type, watchType, condition);
|
||||
bkpt.setMIBreakpoints(points);
|
||||
List bList = getBreakpointsList(target);
|
||||
bList.add(bkpt);
|
||||
|
||||
// Fire a created Event.
|
||||
MIBreakpoint[] miBreakpoints = bkpt.getMIBreakpoints();
|
||||
if (miBreakpoints != null && miBreakpoints.length > 0)
|
||||
miSession.fireEvent(new MIBreakpointCreatedEvent(miSession, miBreakpoints[0].getNumber()));
|
||||
return bkpt;
|
||||
watchpoint.setMIBreakpoints(points);
|
||||
}
|
||||
|
||||
Breakpoint[] exceptionBps = new Breakpoint[2];
|
||||
|
@ -758,8 +767,8 @@ public class BreakpointManager extends Manager {
|
|||
synchronized(exceptionBps) {
|
||||
int id = EXCEPTION_THROW_IDX;
|
||||
if (exceptionBps[EXCEPTION_THROW_IDX] == null) {
|
||||
Location location = new Location(null, EXCEPTION_FUNCS[id], 0);
|
||||
Breakpoint bp = new Breakpoint(target, ICDIBreakpoint.REGULAR, location, null);
|
||||
Location location = new Location(null, EXCEPTION_FUNCS[id]);
|
||||
LineBreakpoint bp = new LineBreakpoint(target, ICDIBreakpoint.REGULAR, location, null);
|
||||
setLocationBreakpoint(bp);
|
||||
exceptionBps[id] = bp;
|
||||
miBreakpoints = bp.getMIBreakpoints();
|
||||
|
@ -770,8 +779,8 @@ public class BreakpointManager extends Manager {
|
|||
synchronized(exceptionBps) {
|
||||
int id = EXCEPTION_THROW_IDX;
|
||||
if (exceptionBps[id] == null) {
|
||||
Location location = new Location(null, EXCEPTION_FUNCS[id], 0);
|
||||
Breakpoint bp = new Breakpoint(target, ICDIBreakpoint.REGULAR, location, null);
|
||||
Location location = new Location(null, EXCEPTION_FUNCS[id]);
|
||||
LineBreakpoint bp = new LineBreakpoint(target, ICDIBreakpoint.REGULAR, location, null);
|
||||
setLocationBreakpoint(bp);
|
||||
exceptionBps[id] = bp;
|
||||
if (miBreakpoints != null) {
|
||||
|
@ -786,7 +795,7 @@ public class BreakpointManager extends Manager {
|
|||
}
|
||||
}
|
||||
|
||||
Exceptionpoint excp = new Exceptionpoint(target, clazz, stopOnThrow, stopOnCatch);
|
||||
Exceptionpoint excp = new Exceptionpoint(target, clazz, stopOnThrow, stopOnCatch, null);
|
||||
if (miBreakpoints != null && miBreakpoints.length > 0) {
|
||||
excp.setMIBreakpoints(miBreakpoints);
|
||||
List blist = getBreakpointsList(target);
|
||||
|
@ -803,12 +812,102 @@ public class BreakpointManager extends Manager {
|
|||
return new Condition(ignoreCount, expression, tids);
|
||||
}
|
||||
|
||||
public Location createLocation(String file, String function, int line) {
|
||||
return new Location(file, function, line);
|
||||
public Location createLineLocation(String file, int line) {
|
||||
return new Location(file, line);
|
||||
}
|
||||
|
||||
public Location createLocation(BigInteger address) {
|
||||
public Location createFunctionLocation(String file, String function) {
|
||||
return new Location(file, function);
|
||||
}
|
||||
|
||||
public Location createAddressLocation(BigInteger address) {
|
||||
return new Location(address);
|
||||
}
|
||||
|
||||
MIBreakInsert[] createMIBreakInsert(LocationBreakpoint bkpt) throws CDIException {
|
||||
boolean hardware = bkpt.isHardware();
|
||||
boolean temporary = bkpt.isTemporary();
|
||||
String exprCond = null;
|
||||
int ignoreCount = 0;
|
||||
String[] threadIds = null;
|
||||
StringBuffer line = new StringBuffer();
|
||||
|
||||
if (bkpt.getCondition() != null) {
|
||||
ICDICondition condition = bkpt.getCondition();
|
||||
exprCond = condition.getExpression();
|
||||
ignoreCount = condition.getIgnoreCount();
|
||||
threadIds = condition.getThreadIds();
|
||||
}
|
||||
|
||||
if (bkpt.getLocator() != null) {
|
||||
ICDILocator locator = bkpt.getLocator();
|
||||
String file = locator.getFile();
|
||||
String function = locator.getFunction();
|
||||
int no = locator.getLineNumber();
|
||||
if (bkpt instanceof LineBreakpoint) {
|
||||
if (file != null && file.length() > 0) {
|
||||
line.append(file).append(':');
|
||||
}
|
||||
line.append(no);
|
||||
} else if (bkpt instanceof FunctionBreakpoint) {
|
||||
if (file != null && file.length() > 0) {
|
||||
line.append(file).append(':');
|
||||
}
|
||||
if (function != null && function.length() > 0) {
|
||||
// GDB does not seem to accept function arguments when
|
||||
// we use file name:
|
||||
// (gdb) break file.c:Test(int)
|
||||
// Will fail, altought it can accept this
|
||||
// (gdb) break file.c:main
|
||||
// so fall back to the line number or
|
||||
// just the name of the function if lineno is invalid.
|
||||
int paren = function.indexOf('(');
|
||||
if (paren != -1) {
|
||||
if (no <= 0) {
|
||||
String func = function.substring(0, paren);
|
||||
line.append(func);
|
||||
} else {
|
||||
line.append(no);
|
||||
}
|
||||
} else {
|
||||
line.append(function);
|
||||
}
|
||||
} else {
|
||||
// ???
|
||||
line.append(no);
|
||||
}
|
||||
} else if (bkpt instanceof AddressBreakpoint) {
|
||||
line.append('*').append(locator.getAddress());
|
||||
} else {
|
||||
// ???
|
||||
if (file != null && file.length() > 0) {
|
||||
line.append(file).append(':');
|
||||
}
|
||||
line.append(no);
|
||||
}
|
||||
}
|
||||
|
||||
MIBreakInsert[] miBreakInserts;
|
||||
MISession miSession = ((Target)bkpt.getTarget()).getMISession();
|
||||
CommandFactory factory = miSession.getCommandFactory();
|
||||
if (threadIds == null || threadIds.length == 0) {
|
||||
MIBreakInsert bi = factory.createMIBreakInsert(temporary, hardware, exprCond, ignoreCount, line.toString(), 0);
|
||||
miBreakInserts = new MIBreakInsert[] { bi } ;
|
||||
} else {
|
||||
List list = new ArrayList(threadIds.length);
|
||||
for (int i = 0; i < threadIds.length; i++) {
|
||||
String threadId = threadIds[i];
|
||||
int tid = 0;
|
||||
if (threadId != null && threadId.length() > 0) {
|
||||
try {
|
||||
tid = Integer.parseInt(threadId);
|
||||
list.add(factory.createMIBreakInsert(temporary, hardware, exprCond, ignoreCount, line.toString(), tid));
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
miBreakInserts = (MIBreakInsert[]) list.toArray(new MIBreakInsert[list.size()]);
|
||||
}
|
||||
return miBreakInserts;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,3 +30,4 @@ cdi.model.Target.Target_not_responding=Target is not responding
|
|||
cdi.model.Target.Cannot_switch_to_thread=Can not switch to thread
|
||||
cdi.model.Target.Inferior_already_running=Inferior is already running
|
||||
cdi.model.MemoryBlock.Bad_Offset=Bad Offset
|
||||
cdi.mode.Target.Bad_location=Bad location
|
||||
|
|
|
@ -12,89 +12,144 @@ package org.eclipse.cdt.debug.mi.core.cdi;
|
|||
|
||||
import java.math.BigInteger;
|
||||
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDIAddressLocation;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDIFileLocation;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDIFunctionLocation;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDILineLocation;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDILocation;
|
||||
|
||||
/**
|
||||
*/
|
||||
public class Location implements ICDILocation {
|
||||
public class Location implements ICDIFileLocation, ICDILineLocation, ICDIFunctionLocation, ICDIAddressLocation {
|
||||
|
||||
BigInteger addr;
|
||||
String file = ""; //$NON-NLS-1$
|
||||
String function = ""; //$NON-NLS-1$
|
||||
int line;
|
||||
BigInteger fAddress = null;
|
||||
String fFile = null;
|
||||
String fFunction = null;
|
||||
int fLine;
|
||||
|
||||
public Location(String f, String fnct, int l) {
|
||||
this(f, fnct, l, null);
|
||||
/**
|
||||
* File location
|
||||
* @param file
|
||||
*/
|
||||
public Location(String file) {
|
||||
this(file, null, 0, null);
|
||||
}
|
||||
|
||||
public Location(String f, String fnct, int l, BigInteger a) {
|
||||
if (f != null)
|
||||
file = f;
|
||||
if (fnct != null)
|
||||
function = fnct;
|
||||
line = l;
|
||||
addr = a;
|
||||
/**
|
||||
* File:function location
|
||||
* @param file
|
||||
* @param function
|
||||
*/
|
||||
public Location(String file, String function) {
|
||||
this(file, function, 0, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* File:line location
|
||||
* @param file
|
||||
* @param line
|
||||
*/
|
||||
public Location(String file, int line) {
|
||||
this (file, null, line, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Address location
|
||||
* @param address
|
||||
*/
|
||||
public Location(BigInteger address) {
|
||||
addr = address;
|
||||
this (null, null, 0, address);
|
||||
}
|
||||
|
||||
protected Location(String file, String function, int line, BigInteger address) {
|
||||
fFile = file;
|
||||
fFunction = function;
|
||||
fLine = line;
|
||||
fAddress = address;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.debug.core.cdi.ICDILocation#getAddress()
|
||||
*/
|
||||
public BigInteger getAddress() {
|
||||
return addr;
|
||||
return fAddress;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.debug.core.cdi.ICDILocation#getFile()
|
||||
*/
|
||||
public String getFile() {
|
||||
return file;
|
||||
return fFile;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.debug.core.cdi.ICDILocation#getFunction()
|
||||
*/
|
||||
public String getFunction() {
|
||||
return function;
|
||||
return fFunction;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.debug.core.cdi.ICDILocation#getLineNumber()
|
||||
*/
|
||||
public int getLineNumber() {
|
||||
return line;
|
||||
return fLine;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.debug.core.cdi.ICDILocation#equals(ICDILocation)
|
||||
*/
|
||||
public boolean equals(ICDILocation location) {
|
||||
String ofile = location.getFile();
|
||||
if (file.length() > 0 && ofile.length() > 0) {
|
||||
if (file.equals(ofile)) {
|
||||
int oline = location.getLineNumber();
|
||||
if (line != 0 && oline != 0) {
|
||||
if (line == oline) {
|
||||
return true;
|
||||
}
|
||||
if (location == this) {
|
||||
return true;
|
||||
}
|
||||
if (location instanceof ICDILineLocation) {
|
||||
ICDILineLocation lineLocation = (ICDILineLocation)location;
|
||||
String oFile = lineLocation.getFile();
|
||||
if (oFile != null && oFile.length() > 0 && fFile != null && fFile.length() > 0 && oFile.equals(fFile)) {
|
||||
if (lineLocation.getLineNumber() == fLine) {
|
||||
return true;
|
||||
}
|
||||
String ofunction = location.getFunction();
|
||||
if (function.length() > 0 && ofunction.length() > 0) {
|
||||
if (function.equals(ofunction)) {
|
||||
return true;
|
||||
}
|
||||
} else if ((fFile == null || fFile.length() == 0) && (oFile == null || oFile.length() == 0)) {
|
||||
if (lineLocation.getLineNumber() == fLine) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
BigInteger oaddr = location.getAddress();
|
||||
if (addr != null && oaddr != null) { //IPF_TODO: check ZERO addresses
|
||||
if (addr.equals(oaddr)) {
|
||||
} else if (location instanceof ICDIFunctionLocation) {
|
||||
ICDIFunctionLocation funcLocation = (ICDIFunctionLocation)location;
|
||||
String oFile = funcLocation.getFile();
|
||||
String oFunction = funcLocation.getFunction();
|
||||
if (oFile != null && oFile.length() > 0 && fFile != null && fFile.length() > 0 && oFile.equals(fFile)) {
|
||||
if (oFunction != null && oFunction.length() > 0 && fFunction != null && fFunction.length() > 0 && oFunction.equals(fFunction)) {
|
||||
return true;
|
||||
} else if ((oFunction == null || oFunction.length() == 0) && (fFunction == null || fFunction.length() == 0)) {
|
||||
return true;
|
||||
}
|
||||
} else if ((fFile == null || fFile.length() == 0) && (oFile == null || oFile.length() == 0)) {
|
||||
if (oFunction != null && oFunction.length() > 0 && fFunction != null && fFunction.length() > 0 && oFunction.equals(fFunction)) {
|
||||
return true;
|
||||
} else if ((oFunction == null || oFunction.length() == 0) && (fFunction == null || fFunction.length() == 0)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else if (location instanceof ICDIAddressLocation) {
|
||||
ICDIAddressLocation addrLocation = (ICDIAddressLocation)location;
|
||||
BigInteger oAddr = addrLocation.getAddress();
|
||||
if (oAddr != null && oAddr.equals(fAddress)) {
|
||||
return true;
|
||||
} else if (oAddr == null && fAddress == null) {
|
||||
return true;
|
||||
}
|
||||
} else if (location instanceof ICDIFileLocation) {
|
||||
ICDIFileLocation fileLocation = (ICDIFileLocation)location;
|
||||
String oFile = fileLocation.getFile();
|
||||
if (oFile != null && oFile.length() > 0 && fFile != null && fFile.length() > 0 && oFile.equals(fFile)) {
|
||||
return true;
|
||||
} else if ((fFile == null || fFile.length() == 0) && (oFile == null || oFile.length() == 0)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.equals(location);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2004 QNX Software Systems and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.debug.mi.core.cdi;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDILocator;
|
||||
|
||||
public class Locator extends Location implements ICDILocator {
|
||||
|
||||
public Locator(String file, String function, int line, BigInteger address) {
|
||||
super(file, function, line, address);
|
||||
}
|
||||
|
||||
boolean equalFile(String oFile) {
|
||||
return equalString(oFile, getFile());
|
||||
}
|
||||
|
||||
boolean equalFunction(String oFunction) {
|
||||
return equalString(oFunction, getFunction());
|
||||
}
|
||||
|
||||
boolean equalLine(int oLine) {
|
||||
return oLine == getLineNumber();
|
||||
}
|
||||
|
||||
boolean equalAddress(BigInteger oAddress) {
|
||||
if (oAddress == null && getAddress() == null) {
|
||||
return true;
|
||||
}
|
||||
if (oAddress != null && oAddress.equals(getAddress())) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean equalString(String f1, String f2) {
|
||||
if (f1 != null && f1.length() > 0 && f2 != null && f2.length() > 0) {
|
||||
return f1.equals(f2);
|
||||
} else if ((f1 == null || f1.length() == 0) && (f2 == null || f2.length() == 0)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean equals(ICDILocator locator) {
|
||||
|
||||
if (locator == this) {
|
||||
return true;
|
||||
}
|
||||
String oFile = locator.getFile();
|
||||
String oFunction = locator.getFunction();
|
||||
int oLine = locator.getLineNumber();
|
||||
BigInteger oAddress = locator.getAddress();
|
||||
|
||||
if (equalFile(oFile) && equalFunction(oFunction) &&
|
||||
equalLine(oLine) && equalAddress(oAddress)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -18,6 +18,11 @@ import org.eclipse.cdt.debug.mi.core.MIException;
|
|||
*/
|
||||
public class MI2CDIException extends CDIException {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public MI2CDIException(MIException e) {
|
||||
super(e.getMessage(), e.getLogMessage());
|
||||
}
|
||||
|
|
|
@ -27,8 +27,10 @@ import org.eclipse.cdt.debug.mi.core.MIFormat;
|
|||
import org.eclipse.cdt.debug.mi.core.MIPlugin;
|
||||
import org.eclipse.cdt.debug.mi.core.MISession;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.Breakpoint;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.LocationBreakpoint;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.SharedLibrary;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.Target;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.Watchpoint;
|
||||
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
|
||||
import org.eclipse.cdt.debug.mi.core.command.MIGDBSetAutoSolib;
|
||||
import org.eclipse.cdt.debug.mi.core.command.MIGDBSetSolibSearchPath;
|
||||
|
@ -108,7 +110,13 @@ public class SharedLibraryManager extends Manager {
|
|||
Breakpoint bkpt = (Breakpoint)bpoints[i];
|
||||
try {
|
||||
boolean enable = bkpt.isEnabled();
|
||||
bpMgr.setLocationBreakpoint(bkpt);
|
||||
if (bkpt instanceof LocationBreakpoint) {
|
||||
bpMgr.setLocationBreakpoint((LocationBreakpoint)bkpt);
|
||||
} else if (bkpt instanceof Watchpoint) {
|
||||
bpMgr.setWatchpoint((Watchpoint)bkpt);
|
||||
} else {
|
||||
throw new CDIException();
|
||||
}
|
||||
bpMgr.deleteFromDeferredList(bkpt);
|
||||
bpMgr.addToBreakpointList(bkpt);
|
||||
// If the breakpoint was disable in the IDE
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2004 QNX Software Systems and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.debug.mi.core.cdi.model;
|
||||
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDICondition;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDILocation;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIAddressBreakpoint;
|
||||
|
||||
public class AddressBreakpoint extends LocationBreakpoint implements
|
||||
ICDIAddressBreakpoint {
|
||||
|
||||
public AddressBreakpoint(Target target, int kind, ICDILocation loc,
|
||||
ICDICondition cond) {
|
||||
super(target, kind, loc, cond);
|
||||
}
|
||||
|
||||
}
|
|
@ -10,37 +10,29 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.mi.core.cdi.model;
|
||||
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.debug.core.cdi.CDIException;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDICondition;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDILocation;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDILocationBreakpoint;
|
||||
import org.eclipse.cdt.debug.mi.core.MIFormat;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.BreakpointManager;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.Condition;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.Location;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.Session;
|
||||
import org.eclipse.cdt.debug.mi.core.output.MIBreakpoint;
|
||||
|
||||
/**
|
||||
*/
|
||||
public class Breakpoint extends CObject implements ICDILocationBreakpoint {
|
||||
public abstract class Breakpoint extends CObject implements ICDIBreakpoint {
|
||||
|
||||
ICDILocation fLocation;
|
||||
ICDICondition condition;
|
||||
MIBreakpoint[] miBreakpoints;
|
||||
int type;
|
||||
boolean enable;
|
||||
|
||||
public Breakpoint(Target target, int kind, ICDILocation loc, ICDICondition cond) {
|
||||
public Breakpoint(Target target, int kind, ICDICondition cond) {
|
||||
super(target);
|
||||
type = kind;
|
||||
fLocation = loc;
|
||||
condition = cond;
|
||||
enable = true;
|
||||
}
|
||||
|
@ -133,27 +125,4 @@ public class Breakpoint extends CObject implements ICDILocationBreakpoint {
|
|||
enable = on;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.debug.core.cdi.ICDILocationBreakpoint#getLocation()
|
||||
*/
|
||||
public ICDILocation getLocation() throws CDIException {
|
||||
if (fLocation == null) {
|
||||
if (miBreakpoints != null && miBreakpoints.length > 0) {
|
||||
BigInteger addr = BigInteger.ZERO;
|
||||
String a = miBreakpoints[0].getAddress();
|
||||
if (a != null) {
|
||||
addr = MIFormat.getBigInteger(a);
|
||||
}
|
||||
fLocation = new Location (miBreakpoints[0].getFile(),
|
||||
miBreakpoints[0].getFunction(),
|
||||
miBreakpoints[0].getLine(),
|
||||
addr);
|
||||
}
|
||||
}
|
||||
return fLocation;
|
||||
}
|
||||
|
||||
public void setLocation(ICDILocation loc) {
|
||||
fLocation = loc;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
package org.eclipse.cdt.debug.mi.core.cdi.model;
|
||||
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDICondition;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIExceptionpoint;
|
||||
|
||||
|
@ -25,8 +26,8 @@ public class Exceptionpoint extends Breakpoint implements ICDIExceptionpoint {
|
|||
|
||||
/**
|
||||
*/
|
||||
public Exceptionpoint(Target target, String clazz, boolean stopOnThrow, boolean stopOnCatch) {
|
||||
super(target, ICDIBreakpoint.REGULAR, null, null);
|
||||
public Exceptionpoint(Target target, String clazz, boolean stopOnThrow, boolean stopOnCatch, ICDICondition cond) {
|
||||
super(target, ICDIBreakpoint.REGULAR, cond);
|
||||
fClazz = clazz;
|
||||
fStopOnThrow = stopOnThrow;
|
||||
fStopOnCatch = stopOnCatch;
|
||||
|
@ -36,14 +37,6 @@ public class Exceptionpoint extends Breakpoint implements ICDIExceptionpoint {
|
|||
return fClazz;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param target
|
||||
* @param miBreak
|
||||
*/
|
||||
// public Exceptionpoint(Target target, MIBreakpoint miBreak) {
|
||||
// super(target, miBreak);
|
||||
// }
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIExceptionpoint#isStopOnThrow()
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2004 QNX Software Systems and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.debug.mi.core.cdi.model;
|
||||
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDICondition;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDILocation;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIFunctionBreakpoint;
|
||||
|
||||
public class FunctionBreakpoint extends LocationBreakpoint implements
|
||||
ICDIFunctionBreakpoint {
|
||||
|
||||
public FunctionBreakpoint(Target target, int kind, ICDILocation loc,
|
||||
ICDICondition cond) {
|
||||
super(target, kind, loc, cond);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2004 QNX Software Systems and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.debug.mi.core.cdi.model;
|
||||
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDICondition;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDILineLocation;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDILineBreakpoint;
|
||||
|
||||
public class LineBreakpoint extends LocationBreakpoint implements ICDILineBreakpoint {
|
||||
|
||||
public LineBreakpoint(Target target, int kind, ICDILineLocation loc, ICDICondition cond) {
|
||||
super(target, kind, loc, cond);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,81 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2004 QNX Software Systems and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.debug.mi.core.cdi.model;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDIAddressLocation;
|
||||
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.ICDILocation;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDILocator;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
|
||||
import org.eclipse.cdt.debug.mi.core.MIFormat;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.Locator;
|
||||
|
||||
public abstract class LocationBreakpoint extends Breakpoint implements ICDIBreakpoint {
|
||||
|
||||
ICDILocation fLocation;
|
||||
|
||||
public LocationBreakpoint(Target target, int kind, ICDILocation loc, ICDICondition cond) {
|
||||
super(target, kind, cond);
|
||||
fLocation = loc;
|
||||
}
|
||||
|
||||
public int getLineNumber() {
|
||||
if (miBreakpoints != null && miBreakpoints.length > 0) {
|
||||
return miBreakpoints[0].getLine();
|
||||
} else if (fLocation instanceof ICDILineLocation) {
|
||||
return ((ICDILineLocation)fLocation).getLineNumber();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public String getFile() {
|
||||
if (miBreakpoints != null && miBreakpoints.length > 0) {
|
||||
return miBreakpoints[0].getFile();
|
||||
} else if (fLocation instanceof ICDILineLocation) {
|
||||
return ((ICDILineLocation)fLocation).getFile();
|
||||
} else if (fLocation instanceof ICDIFunctionLocation) {
|
||||
return ((ICDIFunctionLocation)fLocation).getFile();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public BigInteger getAddress() {
|
||||
if (miBreakpoints != null && miBreakpoints.length > 0) {
|
||||
BigInteger addr = BigInteger.ZERO;
|
||||
String a = miBreakpoints[0].getAddress();
|
||||
if (a != null) {
|
||||
addr = MIFormat.getBigInteger(a);
|
||||
}
|
||||
} else if (fLocation instanceof ICDIAddressLocation) {
|
||||
return ((ICDIAddressLocation)fLocation).getAddress();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getFunction() {
|
||||
if (miBreakpoints != null && miBreakpoints.length > 0) {
|
||||
return miBreakpoints[0].getFunction();
|
||||
} else if (fLocation instanceof ICDIFunctionLocation) {
|
||||
return ((ICDIFunctionLocation)fLocation).getFunction();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ICDILocator getLocator() {
|
||||
return new Locator(getFile(), getFunction(), getLineNumber(), getAddress());
|
||||
}
|
||||
|
||||
}
|
|
@ -13,7 +13,7 @@ package org.eclipse.cdt.debug.mi.core.cdi.model;
|
|||
import java.math.BigInteger;
|
||||
|
||||
import org.eclipse.cdt.debug.core.cdi.CDIException;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDILocation;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDILocator;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIArgumentDescriptor;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDILocalVariableDescriptor;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame;
|
||||
|
@ -23,9 +23,9 @@ import org.eclipse.cdt.debug.mi.core.MIException;
|
|||
import org.eclipse.cdt.debug.mi.core.MIFormat;
|
||||
import org.eclipse.cdt.debug.mi.core.MISession;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.CdiResources;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.Locator;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.Session;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.Location;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.VariableManager;
|
||||
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
|
||||
import org.eclipse.cdt.debug.mi.core.command.MIExecFinish;
|
||||
|
@ -42,7 +42,7 @@ public class StackFrame extends CObject implements ICDIStackFrame {
|
|||
int level;
|
||||
ICDIArgumentDescriptor[] argDescs;
|
||||
ICDILocalVariableDescriptor[] localDescs;
|
||||
Location fLocation;
|
||||
Locator fLocator;
|
||||
|
||||
/*
|
||||
*
|
||||
|
@ -112,22 +112,22 @@ public class StackFrame extends CObject implements ICDIStackFrame {
|
|||
/**
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#getLocation()
|
||||
*/
|
||||
public ICDILocation getLocation() {
|
||||
public ICDILocator getLocator() {
|
||||
BigInteger addr = BigInteger.ZERO;
|
||||
if (frame != null) {
|
||||
if (fLocation == null) {
|
||||
if (fLocator == null) {
|
||||
String a = frame.getAddress();
|
||||
if (a != null) {
|
||||
addr = MIFormat.getBigInteger(a);
|
||||
}
|
||||
fLocation = new Location(frame.getFile(),
|
||||
fLocator = new Locator(frame.getFile(),
|
||||
frame.getFunction(),
|
||||
frame.getLine(),
|
||||
addr);
|
||||
}
|
||||
return fLocation;
|
||||
return fLocator;
|
||||
}
|
||||
return new Location("", "", 0, addr); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
return new Locator("", "", 0, addr); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -146,7 +146,7 @@ public class StackFrame extends CObject implements ICDIStackFrame {
|
|||
return cthread != null &&
|
||||
cthread.equals(stack.getThread()) &&
|
||||
getLevel() == stack.getLevel() &&
|
||||
getLocation().equals(stack.getLocation());
|
||||
getLocator().equals(stack.getLocator());
|
||||
}
|
||||
return super.equals(stackframe);
|
||||
}
|
||||
|
|
|
@ -15,13 +15,18 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.debug.core.cdi.CDIException;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDIAddressLocation;
|
||||
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.ICDILocation;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIAddressBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIExceptionpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIExpression;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIFunctionBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDILocationBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDILineBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIMixedInstruction;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIRegisterGroup;
|
||||
|
@ -490,13 +495,31 @@ public class Target extends SessionObject implements ICDITarget {
|
|||
*/
|
||||
public void stepUntil(ICDILocation location) throws CDIException {
|
||||
CommandFactory factory = miSession.getCommandFactory();
|
||||
String loc = ""; //$NON-NLS-1$
|
||||
if (location.getFile() != null && location.getFile().length() > 0) {
|
||||
loc = location.getFile() + ":" + location.getLineNumber(); //$NON-NLS-1$
|
||||
} else if (location.getFunction() != null && location.getFunction().length() > 0) {
|
||||
loc = location.getFunction();
|
||||
} else if ( ! location.getAddress().equals(BigInteger.ZERO) ) {
|
||||
loc = "*" + location.getAddress().toString(); //$NON-NLS-1$
|
||||
String loc = null;
|
||||
if (location instanceof ICDILineLocation) {
|
||||
ICDILineLocation lineLocation = (ICDILineLocation)location;
|
||||
if (lineLocation.getFile() != null && lineLocation.getFile().length() > 0) {
|
||||
loc = lineLocation.getFile() + ":" + lineLocation.getLineNumber(); //$NON-NLS-1$
|
||||
}
|
||||
} else if (location instanceof ICDIFunctionLocation) {
|
||||
ICDIFunctionLocation funcLocation = (ICDIFunctionLocation)location;
|
||||
if (funcLocation.getFunction() != null && funcLocation.getFunction().length() > 0) {
|
||||
loc = funcLocation.getFunction();
|
||||
}
|
||||
if (funcLocation.getFile() != null && funcLocation.getFile().length() > 0) {
|
||||
if (loc != null) {
|
||||
loc = funcLocation.getFile() + ":" + loc; //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
} else if (location instanceof ICDIAddressLocation) {
|
||||
ICDIAddressLocation addrLocation = (ICDIAddressLocation) location;
|
||||
if (! addrLocation.getAddress().equals(BigInteger.ZERO)) {
|
||||
loc = "*0x" + addrLocation.getAddress().toString(16); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
// Throw an exception we do know where to go
|
||||
if (loc == null) {
|
||||
throw new CDIException (CdiResources.getString("cdi.mode.Target.Bad_location")); //$NON-NLS-1$
|
||||
}
|
||||
MIExecUntil until = factory.createMIExecUntil(loc);
|
||||
try {
|
||||
|
@ -601,14 +624,33 @@ public class Target extends SessionObject implements ICDITarget {
|
|||
*/
|
||||
public void jump(ICDILocation location) throws CDIException {
|
||||
CommandFactory factory = miSession.getCommandFactory();
|
||||
String loc = ""; //$NON-NLS-1$
|
||||
if (location.getFile() != null && location.getFile().length() > 0) {
|
||||
loc = location.getFile() + ":" + location.getLineNumber(); //$NON-NLS-1$
|
||||
} else if (location.getFunction() != null && location.getFunction().length() > 0) {
|
||||
loc = location.getFunction();
|
||||
} else if (! location.getAddress().equals(BigInteger.ZERO)) {
|
||||
loc = "*" + location.getAddress().toString(); //$NON-NLS-1$
|
||||
String loc = null;
|
||||
if (location instanceof ICDILineLocation) {
|
||||
ICDILineLocation lineLocation = (ICDILineLocation)location;
|
||||
if (lineLocation.getFile() != null && lineLocation.getFile().length() > 0) {
|
||||
loc = lineLocation.getFile() + ":" + lineLocation.getLineNumber(); //$NON-NLS-1$
|
||||
}
|
||||
} else if (location instanceof ICDIFunctionLocation) {
|
||||
ICDIFunctionLocation funcLocation = (ICDIFunctionLocation)location;
|
||||
if (funcLocation.getFunction() != null && funcLocation.getFunction().length() > 0) {
|
||||
loc = funcLocation.getFunction();
|
||||
}
|
||||
if (funcLocation.getFile() != null && funcLocation.getFile().length() > 0) {
|
||||
if (loc != null) {
|
||||
loc = funcLocation.getFile() + ":" + loc; //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
} else if (location instanceof ICDIAddressLocation) {
|
||||
ICDIAddressLocation addrLocation = (ICDIAddressLocation) location;
|
||||
if (! addrLocation.getAddress().equals(BigInteger.ZERO)) {
|
||||
loc = "*0x" + addrLocation.getAddress().toString(16); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
// Throw an exception we do know where to go
|
||||
if (loc == null) {
|
||||
throw new CDIException (CdiResources.getString("cdi.mode.Target.Bad_location")); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
MIJump jump = factory.createMIJump(loc);
|
||||
try {
|
||||
miSession.postCommand(jump);
|
||||
|
@ -729,41 +771,77 @@ public class Target extends SessionObject implements ICDITarget {
|
|||
// Implementaton of ICDIBreapointManagement.
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpointManagement#setLineBreakpoint(int, org.eclipse.cdt.debug.core.cdi.ICDILineLocation, org.eclipse.cdt.debug.core.cdi.ICDICondition, boolean)
|
||||
*/
|
||||
public ICDILineBreakpoint setLineBreakpoint(int type, ICDILineLocation location,
|
||||
ICDICondition condition, boolean deferred) throws CDIException {
|
||||
BreakpointManager bMgr = ((Session)getSession()).getBreakpointManager();
|
||||
return bMgr.setLineBreakpoint(this, type, location, condition, deferred);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpointManagement#setFunctionBreakpoint(int, org.eclipse.cdt.debug.core.cdi.ICDIFunctionLocation, org.eclipse.cdt.debug.core.cdi.ICDICondition, boolean)
|
||||
*/
|
||||
public ICDIFunctionBreakpoint setFunctionBreakpoint(int type, ICDIFunctionLocation location,
|
||||
ICDICondition condition, boolean deferred) throws CDIException {
|
||||
BreakpointManager bMgr = ((Session)getSession()).getBreakpointManager();
|
||||
return bMgr.setFunctionBreakpoint(this, type, location, condition, deferred);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpointManagement#setAddressBreakpoint(int, org.eclipse.cdt.debug.core.cdi.ICDIAddressLocation, org.eclipse.cdt.debug.core.cdi.ICDICondition, boolean)
|
||||
*/
|
||||
public ICDIAddressBreakpoint setAddressBreakpoint(int type, ICDIAddressLocation location,
|
||||
ICDICondition condition, boolean deferred) throws CDIException {
|
||||
BreakpointManager bMgr = ((Session)getSession()).getBreakpointManager();
|
||||
return bMgr.setAddressBreakpoint(this, type, location, condition, deferred);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpointManagement#setWatchpoint(int, int, java.lang.String, org.eclipse.cdt.debug.core.cdi.ICDICondition)
|
||||
*/
|
||||
public ICDIWatchpoint setWatchpoint(int type, int watchType, String expression,
|
||||
ICDICondition condition) throws CDIException {
|
||||
BreakpointManager bMgr = ((Session)getSession()).getBreakpointManager();
|
||||
return bMgr.setWatchpoint(this, type, watchType, expression, condition);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpointManagement#setExceptionBreakpoint(java.lang.String, boolean, boolean)
|
||||
*/
|
||||
public ICDIExceptionpoint setExceptionBreakpoint(String clazz, boolean stopOnThrow, boolean stopOnCatch)
|
||||
throws CDIException {
|
||||
throw new CDIException(CdiResources.getString("cdi.Common.Not_implemented")); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpointManagement#getBreakpoints()
|
||||
*/
|
||||
public ICDIBreakpoint[] getBreakpoints() throws CDIException {
|
||||
BreakpointManager bMgr = ((Session)getSession()).getBreakpointManager();
|
||||
return bMgr.getBreakpoints(this);
|
||||
}
|
||||
|
||||
public ICDILocationBreakpoint setLocationBreakpoint(int type, ICDILocation location,
|
||||
ICDICondition condition, boolean deferred) throws CDIException {
|
||||
BreakpointManager bMgr = ((Session)getSession()).getBreakpointManager();
|
||||
return bMgr.setLocationBreakpoint(this, type, location, condition, deferred);
|
||||
}
|
||||
|
||||
public ICDIWatchpoint setWatchpoint(int type, int watchType, String expression,
|
||||
ICDICondition condition) throws CDIException {
|
||||
BreakpointManager bMgr = ((Session)getSession()).getBreakpointManager();
|
||||
return bMgr.setWatchpoint(this, type, watchType, expression, condition);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpointManagement#deleteBreakpoints(org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint[])
|
||||
*/
|
||||
public void deleteBreakpoints(ICDIBreakpoint[] breakpoints) throws CDIException {
|
||||
BreakpointManager bMgr = ((Session)getSession()).getBreakpointManager();
|
||||
bMgr.deleteBreakpoints(this, breakpoints);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpointManagement#deleteAllBreakpoints()
|
||||
*/
|
||||
public void deleteAllBreakpoints() throws CDIException {
|
||||
BreakpointManager bMgr = ((Session)getSession()).getBreakpointManager();
|
||||
bMgr.deleteAllBreakpoints(this);
|
||||
}
|
||||
|
||||
public ICDIExceptionpoint setExceptionBreakpoint(String clazz, boolean stopOnThrow, boolean stopOnCatch)
|
||||
throws CDIException {
|
||||
throw new CDIException(CdiResources.getString("cdi.Common.Not_implemented")); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#createCondition(int, java.lang.String, String)
|
||||
*/
|
||||
/*
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#createCondition(int, java.lang.String, String)
|
||||
*/
|
||||
public ICDICondition createCondition(int ignoreCount, String expression) {
|
||||
return createCondition(ignoreCount, expression, null);
|
||||
}
|
||||
|
@ -777,19 +855,27 @@ public class Target extends SessionObject implements ICDITarget {
|
|||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#createLocation(java.lang.String, java.lang.String, int)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#createLineLocation(java.lang.String, int)
|
||||
*/
|
||||
public ICDILocation createLocation(String file, String function, int line) {
|
||||
public ICDILineLocation createLineLocation(String file, int line) {
|
||||
BreakpointManager bMgr = ((Session)getSession()).getBreakpointManager();
|
||||
return bMgr.createLocation(file, function, line);
|
||||
return bMgr.createLineLocation(file, line);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#createFunctionLocation(java.lang.String, java.lang.String)
|
||||
*/
|
||||
public ICDIFunctionLocation createFunctionLocation(String file, String function) {
|
||||
BreakpointManager bMgr = ((Session)getSession()).getBreakpointManager();
|
||||
return bMgr.createFunctionLocation(file, function);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#createLocation(long)
|
||||
*/
|
||||
public ICDILocation createLocation(BigInteger address) {
|
||||
public ICDIAddressLocation createAddressLocation(BigInteger address) {
|
||||
BreakpointManager bMgr = ((Session)getSession()).getBreakpointManager();
|
||||
return bMgr.createLocation(address);
|
||||
return bMgr.createAddressLocation(address);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
|
|
@ -17,14 +17,12 @@ import org.eclipse.cdt.debug.core.cdi.CDIException;
|
|||
import org.eclipse.cdt.debug.core.cdi.ICDICondition;
|
||||
import org.eclipse.cdt.debug.core.cdi.ICDILocation;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDILocationBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDISignal;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIThread;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIThreadStorageDescriptor;
|
||||
import org.eclipse.cdt.debug.mi.core.MIException;
|
||||
import org.eclipse.cdt.debug.mi.core.MISession;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.BreakpointManager;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.CdiResources;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.RegisterManager;
|
||||
|
@ -492,28 +490,6 @@ public class Thread extends CObject implements ICDIThread {
|
|||
return (ICDIBreakpoint[]) list.toArray(new ICDIBreakpoint[list.size()]);
|
||||
}
|
||||
|
||||
public ICDILocationBreakpoint setLocationBreakpoint(int type, ICDILocation location,
|
||||
ICDICondition condition, boolean deferred) throws CDIException {
|
||||
Target target = (Target)getTarget();
|
||||
String[] threadIds = new String[] { Integer.toString(getId()) };
|
||||
int icount = 0;
|
||||
String exp = new String();
|
||||
if (condition != null) {
|
||||
icount = condition.getIgnoreCount();
|
||||
exp = condition.getExpression();
|
||||
String[] tids = condition.getThreadIds();
|
||||
if (tids != null && tids.length > 0) {
|
||||
String[] temp = new String[threadIds.length + tids.length];
|
||||
System.arraycopy(threadIds, 0, temp, 0, threadIds.length);
|
||||
System.arraycopy(tids, 0, temp, threadIds.length, tids.length);
|
||||
threadIds = temp;
|
||||
}
|
||||
}
|
||||
BreakpointManager bMgr = ((Session)target.getSession()).getBreakpointManager();
|
||||
ICDICondition newCondition = bMgr.createCondition(icount, exp, threadIds);
|
||||
return target.setLocationBreakpoint(type, location, newCondition, deferred);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#getThreadStorageDescriptors()
|
||||
*/
|
||||
|
|
|
@ -23,7 +23,7 @@ public class Watchpoint extends Breakpoint implements ICDIWatchpoint {
|
|||
String what;
|
||||
|
||||
public Watchpoint(Target target, String expression, int type, int wType, ICDICondition cond) {
|
||||
super(target, type, null, cond); //$NON-NLS-1$
|
||||
super(target, type, cond);
|
||||
watchType = wType;
|
||||
what = expression;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue