1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-21 21:52:10 +02:00

More implementation.

This commit is contained in:
Alain Magloire 2002-08-20 04:27:17 +00:00
parent c1f1744c46
commit 893ef39e38

View file

@ -23,8 +23,10 @@ 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.MIBreakDisable;
import org.eclipse.cdt.debug.mi.core.command.MIBreakEnable; import org.eclipse.cdt.debug.mi.core.command.MIBreakEnable;
import org.eclipse.cdt.debug.mi.core.command.MIBreakInsert; import org.eclipse.cdt.debug.mi.core.command.MIBreakInsert;
import org.eclipse.cdt.debug.mi.core.command.MIBreakList;
import org.eclipse.cdt.debug.mi.core.command.MIBreakWatch; import org.eclipse.cdt.debug.mi.core.command.MIBreakWatch;
import org.eclipse.cdt.debug.mi.core.output.MIBreakInsertInfo; import org.eclipse.cdt.debug.mi.core.output.MIBreakInsertInfo;
import org.eclipse.cdt.debug.mi.core.output.MIBreakListInfo;
import org.eclipse.cdt.debug.mi.core.output.MIBreakPoint; import org.eclipse.cdt.debug.mi.core.output.MIBreakPoint;
import org.eclipse.cdt.debug.mi.core.output.MIBreakWatchInfo; import org.eclipse.cdt.debug.mi.core.output.MIBreakWatchInfo;
import org.eclipse.cdt.debug.mi.core.output.MIInfo; import org.eclipse.cdt.debug.mi.core.output.MIInfo;
@ -35,24 +37,48 @@ import org.eclipse.cdt.debug.mi.core.output.MIInfo;
public class BreakpointManager extends SessionObject implements ICDIBreakpointManager { public class BreakpointManager extends SessionObject implements ICDIBreakpointManager {
List breakList; List breakList;
public BreakpointManager(CSession session) { public BreakpointManager(CSession session) {
super(session); super(session);
breakList = new ArrayList(1); breakList = new ArrayList(1);
} }
boolean containsBreakpoint(int number) {
return (getBreakpoint(number) != null);
}
Breakpoint getBreakpoint(int number) {
ICDIBreakpoint[] bkpts = listBreakpoints();
for (int i = 0; i < bkpts.length; i++) {
if (bkpts[i] instanceof Breakpoint) {
Breakpoint point = (Breakpoint) bkpts[i];
MIBreakPoint miBreak = point.getMIBreakPoint();
if (miBreak.getNumber() == number) {
return point;
}
}
}
return null;
}
Breakpoint[] listBreakpoints() {
return (Breakpoint[]) breakList.toArray(
new Breakpoint[breakList.size()]);
}
/** /**
* @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#deleteAllBreakpoints() * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#deleteAllBreakpoints()
*/ */
public void deleteAllBreakpoints() throws CDIException { public void deleteAllBreakpoints() throws CDIException {
deleteBreakpoints(getBreakpoints()); deleteBreakpoints(listBreakpoints());
} }
/** /**
* @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#deleteBreakpoint(ICDIBreakpoint) * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#deleteBreakpoint(ICDIBreakpoint)
*/ */
public void deleteBreakpoint(ICDIBreakpoint breakpoint) throws CDIException { public void deleteBreakpoint(ICDIBreakpoint breakpoint)
deleteBreakpoints(new ICDIBreakpoint[]{breakpoint}); throws CDIException {
deleteBreakpoints(new ICDIBreakpoint[] { breakpoint });
} }
/** /**
@ -63,7 +89,8 @@ public class BreakpointManager extends SessionObject implements ICDIBreakpointMa
for (int i = 0; i < numbers.length; i++) { for (int i = 0; i < numbers.length; i++) {
if (breakpoints[i] instanceof Breakpoint if (breakpoints[i] instanceof Breakpoint
&& breakList.contains(breakpoints[i])) { && breakList.contains(breakpoints[i])) {
numbers[i] = ((Breakpoint)breakpoints[i]).getMIBreakPoint().getNumber(); numbers[i] =
((Breakpoint) breakpoints[i]).getMIBreakPoint().getNumber();
} else { } else {
throw new CDIException("Not a CDT breakpoint"); throw new CDIException("Not a CDT breakpoint");
} }
@ -75,7 +102,7 @@ public class BreakpointManager extends SessionObject implements ICDIBreakpointMa
s.getMISession().postCommand(breakDelete); s.getMISession().postCommand(breakDelete);
MIInfo info = breakDelete.getMIInfo(); MIInfo info = breakDelete.getMIInfo();
if (info == null) { if (info == null) {
throw new CDIException("Timedout"); throw new CDIException("No answer");
} }
} catch (MIException e) { } catch (MIException e) {
throw new CDIException(e.toString()); throw new CDIException(e.toString());
@ -87,59 +114,83 @@ public class BreakpointManager extends SessionObject implements ICDIBreakpointMa
public void enableBreakpoint(ICDIBreakpoint breakpoint) throws CDIException { public void enableBreakpoint(ICDIBreakpoint breakpoint) throws CDIException {
int number = 0; int number = 0;
if (breakpoint instanceof Breakpoint && breakList.contains(breakpoint)) { if (breakpoint instanceof Breakpoint
number = ((Breakpoint)breakpoint).getMIBreakPoint().getNumber(); && breakList.contains(breakpoint)) {
number = ((Breakpoint) breakpoint).getMIBreakPoint().getNumber();
} else { } else {
throw new CDIException("Not a CDT breakpoint"); throw new CDIException("Not a CDT breakpoint");
} }
CSession s = getCSession(); CSession s = getCSession();
CommandFactory factory = s.getMISession().getCommandFactory(); CommandFactory factory = s.getMISession().getCommandFactory();
MIBreakEnable breakEnable = factory.createMIBreakEnable(new int[]{number}); MIBreakEnable breakEnable =
factory.createMIBreakEnable(new int[] { number });
try { try {
s.getMISession().postCommand(breakEnable); s.getMISession().postCommand(breakEnable);
MIInfo info = breakEnable.getMIInfo(); MIInfo info = breakEnable.getMIInfo();
if (info == null) { if (info == null) {
throw new CDIException("Timedout"); throw new CDIException("No answer");
} }
} catch (MIException e) { } catch (MIException e) {
throw new CDIException(e.toString()); throw new CDIException(e.toString());
} }
((Breakpoint)breakpoint).getMIBreakPoint().setEnabled(true); ((Breakpoint) breakpoint).getMIBreakPoint().setEnabled(true);
} }
public void disableBreakpoint(ICDIBreakpoint breakpoint) throws CDIException { public void disableBreakpoint(ICDIBreakpoint breakpoint) throws CDIException {
int number = 0; int number = 0;
if (breakpoint instanceof Breakpoint && breakList.contains(breakpoint)) { if (breakpoint instanceof Breakpoint
number = ((Breakpoint)breakpoint).getMIBreakPoint().getNumber(); && breakList.contains(breakpoint)) {
number = ((Breakpoint) breakpoint).getMIBreakPoint().getNumber();
} else { } else {
throw new CDIException("Not a CDT breakpoint"); throw new CDIException("Not a CDT breakpoint");
} }
CSession s = getCSession(); CSession s = getCSession();
CommandFactory factory = s.getMISession().getCommandFactory(); CommandFactory factory = s.getMISession().getCommandFactory();
MIBreakDisable breakDisable = factory.createMIBreakDisable(new int[]{number}); MIBreakDisable breakDisable =
factory.createMIBreakDisable(new int[] { number });
try { try {
s.getMISession().postCommand(breakDisable); s.getMISession().postCommand(breakDisable);
MIInfo info = breakDisable.getMIInfo(); MIInfo info = breakDisable.getMIInfo();
if (info == null) { if (info == null) {
throw new CDIException("Timeout"); throw new CDIException("No answer");
} }
} catch (MIException e) { } catch (MIException e) {
throw new CDIException(e.toString()); throw new CDIException(e.toString());
} }
((Breakpoint)breakpoint).getMIBreakPoint().setEnabled(false); ((Breakpoint) breakpoint).getMIBreakPoint().setEnabled(false);
} }
/** /**
* @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#getBreakpoints() * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#getBreakpoints()
*/ */
public ICDIBreakpoint[] getBreakpoints() throws CDIException { public ICDIBreakpoint[] getBreakpoints() throws CDIException {
return (ICDIBreakpoint[])breakList.toArray(new ICDIBreakpoint[breakList.size()]); CSession s = getCSession();
CommandFactory factory = s.getMISession().getCommandFactory();
MIBreakList breakpointList = factory.createMIBreakList();
try {
s.getMISession().postCommand(breakpointList);
MIBreakListInfo info = breakpointList.getMIBreakListInfo();
if (info == null) {
throw new CDIException("No answer");
}
MIBreakPoint[] miPoints = info.getBreakPoints();
for (int i = 0; i < miPoints.length; i++) {
if (!containsBreakpoint(miPoints[i].getNumber())) {
// FIXME: Generate a Create/Change Event??
breakList.add(new Breakpoint(this, miPoints[i]));
}
}
// FIXME: Generate a DestroyEvent for deleted ones.
} catch (MIException e) {
throw new CDIException(e.toString());
}
return (ICDIBreakpoint[]) listBreakpoints();
} }
/** /**
* @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#setCatchpoint(int, ICDICatchEvent, String, ICDICondition, boolean) * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#setCatchpoint(int, ICDICatchEvent, String, ICDICondition, boolean)
*/ */
public ICDICatchpoint setCatchpoint(int type, ICDICatchEvent event, String expression, public ICDICatchpoint setCatchpoint( int type, ICDICatchEvent event, String expression,
ICDICondition condition) throws CDIException { ICDICondition condition) throws CDIException {
throw new CDIException("Not Supported"); throw new CDIException("Not Supported");
} }
@ -147,7 +198,7 @@ public class BreakpointManager extends SessionObject implements ICDIBreakpointMa
/** /**
* @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#setLocationBreakpoint(int, ICDILocation, ICDICondition, boolean, String) * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#setLocationBreakpoint(int, ICDILocation, ICDICondition, boolean, String)
*/ */
public ICDILocationBreakpoint setLocationBreakpoint(int type, ICDILocation location, public ICDILocationBreakpoint setLocationBreakpoint( int type, ICDILocation location,
ICDICondition condition, String threadId) throws CDIException { ICDICondition condition, String threadId) throws CDIException {
boolean hardware = (type == ICDIBreakpoint.HARDWARE); boolean hardware = (type == ICDIBreakpoint.HARDWARE);
@ -155,15 +206,14 @@ public class BreakpointManager extends SessionObject implements ICDIBreakpointMa
String exprCond = null; String exprCond = null;
int ignoreCount = 0; int ignoreCount = 0;
StringBuffer line = new StringBuffer(); StringBuffer line = new StringBuffer();
if (condition != null) { if (condition != null) {
exprCond = condition.getExpression(); exprCond = condition.getExpression();
ignoreCount = condition.getIgnoreCount(); ignoreCount = condition.getIgnoreCount();
} }
if (location != null) { if (location != null) {
String file = location.getFile(); String file = location.getFile();
String function = location.getFunction(); String function = location.getFunction();
if (file != null && file.length() > 0) { if (file != null && file.length() > 0) {
line.append(file).append(':'); line.append(file).append(':');
if (function != null && function.length() > 0) { if (function != null && function.length() > 0) {
@ -172,7 +222,7 @@ public class BreakpointManager extends SessionObject implements ICDIBreakpointMa
line.append(location.getLineNumber()); line.append(location.getLineNumber());
} }
} else if (function != null && function.length() > 0) { } else if (function != null && function.length() > 0) {
line.append(function); line.append(function);
} else { } else {
line.append('*').append(location.getAddress()); line.append('*').append(location.getAddress());
} }
@ -180,14 +230,15 @@ public class BreakpointManager extends SessionObject implements ICDIBreakpointMa
CSession s = getCSession(); CSession s = getCSession();
CommandFactory factory = s.getMISession().getCommandFactory(); CommandFactory factory = s.getMISession().getCommandFactory();
MIBreakInsert breakInsert = factory.createMIBreakInsert(temporary, hardware, MIBreakInsert breakInsert =
exprCond, ignoreCount, line.toString()); factory.createMIBreakInsert( temporary, hardware, exprCond,
ignoreCount, line.toString());
MIBreakPoint[] points = null; MIBreakPoint[] points = null;
try { try {
s.getMISession().postCommand(breakInsert); s.getMISession().postCommand(breakInsert);
MIBreakInsertInfo info = breakInsert.getMIBreakInsertInfo(); MIBreakInsertInfo info = breakInsert.getMIBreakInsertInfo();
if (info == null) { if (info == null) {
throw new CDIException("Timedout"); throw new CDIException("No answer");
} }
points = info.getBreakPoints(); points = info.getBreakPoints();
if (points == null || points.length == 0) { if (points == null || points.length == 0) {
@ -197,7 +248,7 @@ public class BreakpointManager extends SessionObject implements ICDIBreakpointMa
throw new CDIException(e.toString()); throw new CDIException(e.toString());
} }
Breakpoint bkpt= new Breakpoint(this, points[0]); Breakpoint bkpt = new Breakpoint(this, points[0]);
breakList.add(bkpt); breakList.add(bkpt);
return bkpt; return bkpt;
} }
@ -205,22 +256,22 @@ public class BreakpointManager extends SessionObject implements ICDIBreakpointMa
/** /**
* @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#setWatchpoint(int, int, String, ICDICondition, boolean) * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#setWatchpoint(int, int, String, ICDICondition, boolean)
*/ */
public ICDIWatchpoint setWatchpoint(int type, int watchType, String expression, public ICDIWatchpoint setWatchpoint( int type, int watchType, String expression,
ICDICondition condition) throws CDIException { ICDICondition condition) throws CDIException {
boolean access = (type == ICDIWatchpoint.WRITE); boolean access = (type == ICDIWatchpoint.WRITE);
boolean read = (type == ICDIWatchpoint.READ); boolean read = (type == ICDIWatchpoint.READ);
CSession s = getCSession(); CSession s = getCSession();
CommandFactory factory = s.getMISession().getCommandFactory(); CommandFactory factory = s.getMISession().getCommandFactory();
MIBreakWatch breakWatch = factory.createMIBreakWatch(access, read, expression); MIBreakWatch breakWatch =
factory.createMIBreakWatch(access, read, expression);
MIBreakPoint[] points = null; MIBreakPoint[] points = null;
try { try {
s.getMISession().postCommand(breakWatch); s.getMISession().postCommand(breakWatch);
MIBreakWatchInfo info = breakWatch.getMIBreakWatchInfo(); MIBreakWatchInfo info = breakWatch.getMIBreakWatchInfo();
if (info == null) {
throw new CDIException("Timedout");
}
points = info.getBreakPoints(); points = info.getBreakPoints();
if (info == null) {
throw new CDIException("No answer");
}
if (points == null || points.length == 0) { if (points == null || points.length == 0) {
throw new CDIException("Parsing Error"); throw new CDIException("Parsing Error");
} }
@ -228,7 +279,7 @@ public class BreakpointManager extends SessionObject implements ICDIBreakpointMa
throw new CDIException(e.toString()); throw new CDIException(e.toString());
} }
Watchpoint bkpt= new Watchpoint(this, points[0]); Watchpoint bkpt = new Watchpoint(this, points[0]);
breakList.add(bkpt); breakList.add(bkpt);
return bkpt; return bkpt;
} }