1
0
Fork 0
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:
Alain Magloire 2005-04-25 19:11:38 +00:00
parent 838acedf59
commit 03f49cac54
17 changed files with 719 additions and 280 deletions

View file

@ -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

View file

@ -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,
/* (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;
}
}

View file

@ -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

View file

@ -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) {
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;
}
} else if ((fFile == null || fFile.length() == 0) && (oFile == null || oFile.length() == 0)) {
if (lineLocation.getLineNumber() == fLine) {
return true;
}
}
String ofunction = location.getFunction();
if (function.length() > 0 && ofunction.length() > 0) {
if (function.equals(ofunction)) {
} 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;
}
}
BigInteger oaddr = location.getAddress();
if (addr != null && oaddr != null) { //IPF_TODO: check ZERO addresses
if (addr.equals(oaddr)) {
} 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;
}
}

View file

@ -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;
}
}

View file

@ -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());
}

View file

@ -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

View file

@ -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);
}
}

View file

@ -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;
}
}

View file

@ -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()
*/

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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());
}
}

View file

@ -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);
}

View file

@ -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,38 +771,74 @@ public class Target extends SessionObject implements ICDITarget {
// Implementaton of ICDIBreapointManagement.
public ICDIBreakpoint[] getBreakpoints() throws CDIException {
BreakpointManager bMgr = ((Session)getSession()).getBreakpointManager();
return bMgr.getBreakpoints(this);
}
public ICDILocationBreakpoint setLocationBreakpoint(int type, ICDILocation location,
/* (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.setLocationBreakpoint(this, type, location, condition, deferred);
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);
}
/* (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)
*/
@ -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)

View file

@ -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()
*/

View file

@ -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;
}