1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-17 22:15:23 +02:00

More Events are pass to the CDI layer.

This commit is contained in:
Alain Magloire 2002-08-14 04:03:02 +00:00
parent 1a362a1398
commit 8b52ecdb22
23 changed files with 381 additions and 216 deletions

View file

@ -95,7 +95,11 @@ public class MIPlugin extends Plugin {
public static void debugLog(String message) { public static void debugLog(String message) {
// if ( getDefault().isDebugging() ) { // if ( getDefault().isDebugging() ) {
// getDefault().getLog().log(StatusUtil.newStatus(Status.ERROR, message, null)); // getDefault().getLog().log(StatusUtil.newStatus(Status.ERROR, message, null));
System.err.println(message); if (message.endsWith("\n")) {
System.err.print(message);
} else {
System.err.println(message);
}
// } // }
} }
} }

View file

@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.eclipse.cdt.debug.mi.core.command.Command; import org.eclipse.cdt.debug.mi.core.command.Command;
import org.eclipse.cdt.debug.mi.core.command.MIExecFinish;
import org.eclipse.cdt.debug.mi.core.command.MIExecNext; import org.eclipse.cdt.debug.mi.core.command.MIExecNext;
import org.eclipse.cdt.debug.mi.core.command.MIExecNextInstruction; import org.eclipse.cdt.debug.mi.core.command.MIExecNextInstruction;
import org.eclipse.cdt.debug.mi.core.command.MIExecStep; import org.eclipse.cdt.debug.mi.core.command.MIExecStep;
@ -23,9 +24,10 @@ import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIExitEvent; import org.eclipse.cdt.debug.mi.core.event.MIExitEvent;
import org.eclipse.cdt.debug.mi.core.event.MIFunctionFinishedEvent; import org.eclipse.cdt.debug.mi.core.event.MIFunctionFinishedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent; import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent;
import org.eclipse.cdt.debug.mi.core.event.MILocationReachedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent; import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent;
import org.eclipse.cdt.debug.mi.core.event.MISignalEvent; import org.eclipse.cdt.debug.mi.core.event.MISignalEvent;
import org.eclipse.cdt.debug.mi.core.event.MIStepEvent; import org.eclipse.cdt.debug.mi.core.event.MISteppingRangeEvent;
import org.eclipse.cdt.debug.mi.core.event.MIWatchpointEvent; import org.eclipse.cdt.debug.mi.core.event.MIWatchpointEvent;
import org.eclipse.cdt.debug.mi.core.output.MIAsyncRecord; import org.eclipse.cdt.debug.mi.core.output.MIAsyncRecord;
import org.eclipse.cdt.debug.mi.core.output.MIConsoleStreamOutput; import org.eclipse.cdt.debug.mi.core.output.MIConsoleStreamOutput;
@ -115,22 +117,27 @@ MIPlugin.getDefault().debugLog(line);
// Check if the state changed. // Check if the state changed.
String state = rr.getResultClass(); String state = rr.getResultClass();
if ("running".equals(state)) { if ("running".equals(state)) {
MIEvent[] events = new MIEvent[1]; int type = 0;
// Check the type of command // Check the type of command
// if it was a step instruction set state stepping // if it was a step instruction set state stepping
if (cmd instanceof MIExecNext || if (cmd instanceof MIExecNext) {
cmd instanceof MIExecNextInstruction || type = MIRunningEvent.NEXT;
cmd instanceof MIExecStep || } else if (cmd instanceof MIExecNextInstruction) {
cmd instanceof MIExecStepInstruction || type = MIRunningEvent.NEXTI;
cmd instanceof MIExecUntil) { } else if (cmd instanceof MIExecStep) {
session.getMIProcess().setStepping(); type = MIRunningEvent.STEP;
events[0] = new MIRunningEvent(true); } else if (cmd instanceof MIExecStepInstruction) {
type = MIRunningEvent.STEPI;
} else if (cmd instanceof MIExecUntil) {
type = MIRunningEvent.UNTIL;
} else if (cmd instanceof MIExecFinish) {
type = MIRunningEvent.FINISH;
} else { } else {
session.getMIProcess().setRunning(); type = MIRunningEvent.CONTINUE;
events[0] = new MIRunningEvent();
} }
Thread eventTread = new EventThread(session, events); session.getMIProcess().setRunning();
eventTread.start(); MIEvent event = new MIRunningEvent(type);
fireEvents(new MIEvent[]{event});
} else if ("exit".equals(state)) { } else if ("exit".equals(state)) {
session.getMIProcess().setTerminated(); session.getMIProcess().setTerminated();
} }
@ -155,10 +162,7 @@ MIPlugin.getDefault().debugLog(line);
} }
MIEvent[] events = (MIEvent[])list.toArray(new MIEvent[list.size()]); MIEvent[] events = (MIEvent[])list.toArray(new MIEvent[list.size()]);
if (events.length > 0) { fireEvents(events);
Thread eventTread = new EventThread(session, events);
eventTread.start();
}
} }
} }
@ -291,9 +295,9 @@ MIPlugin.getDefault().debugLog(line);
} }
} else if ("end-stepping-range".equals(reason)) { } else if ("end-stepping-range".equals(reason)) {
if (exec != null) { if (exec != null) {
event = new MIStepEvent(exec); event = new MISteppingRangeEvent(exec);
} else if (rr != null) { } else if (rr != null) {
event = new MIStepEvent(rr); event = new MISteppingRangeEvent(rr);
} }
} else if ("signal-received".equals(reason)) { } else if ("signal-received".equals(reason)) {
if (exec != null) { if (exec != null) {
@ -303,9 +307,9 @@ MIPlugin.getDefault().debugLog(line);
} }
} else if ("location-reached".equals(reason)) { } else if ("location-reached".equals(reason)) {
if (exec != null) { if (exec != null) {
event = new MISignalEvent(exec); event = new MILocationReachedEvent(exec);
} else if (rr != null) { } else if (rr != null) {
event = new MISignalEvent(rr); event = new MILocationReachedEvent(rr);
} }
} else if ("function-finished".equals(reason)) { } else if ("function-finished".equals(reason)) {
if (exec != null) { if (exec != null) {
@ -322,4 +326,11 @@ MIPlugin.getDefault().debugLog(line);
} }
return event; return event;
} }
public void fireEvents(MIEvent[] events) {
if (events.length > 0) {
Thread eventTread = new EventThread(session, events);
eventTread.start();
}
}
} }

View file

@ -1,25 +1,14 @@
package org.eclipse.cdt.debug.mi.core.cdi; package org.eclipse.cdt.debug.mi.core.cdi;
import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDICatchEvent;
import org.eclipse.cdt.debug.core.cdi.ICDICatchpoint;
import org.eclipse.cdt.debug.core.cdi.ICDICondition; import org.eclipse.cdt.debug.core.cdi.ICDICondition;
import org.eclipse.cdt.debug.core.cdi.ICDILocation; import org.eclipse.cdt.debug.core.cdi.ICDILocation;
import org.eclipse.cdt.debug.core.cdi.ICDILocationBreakpoint; import org.eclipse.cdt.debug.core.cdi.ICDILocationBreakpoint;
import org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint;
import org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction;
import org.eclipse.cdt.debug.mi.core.output.MIBreakPoint; import org.eclipse.cdt.debug.mi.core.output.MIBreakPoint;
/** /**
* @author alain
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/ */
public class Breakpoint extends SessionObject implements ICDILocationBreakpoint, public class Breakpoint extends SessionObject implements ICDILocationBreakpoint {
ICDICatchpoint, ICDIWatchpoint {
ICDILocation location; ICDILocation location;
ICDICondition condition; ICDICondition condition;
@ -33,7 +22,7 @@ public class Breakpoint extends SessionObject implements ICDILocationBreakpoint,
} }
MIBreakPoint getMIBreakPoint() { MIBreakPoint getMIBreakPoint() {
return miBreakPoint; return miBreakPoint;
} }
/** /**
@ -41,20 +30,8 @@ public class Breakpoint extends SessionObject implements ICDILocationBreakpoint,
*/ */
public ICDICondition getCondition() throws CDIException { public ICDICondition getCondition() throws CDIException {
if (condition == null) { if (condition == null) {
condition = new ICDICondition () { condition = new Condition(miBreakPoint.getIgnoreCount(),
/** miBreakPoint.getWhat());
* @see org.eclipse.cdt.debug.core.cdi.ICDICondition#getIgnoreCount()
*/
public int getIgnoreCount() {
return miBreakPoint.getIgnoreCount();
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDICondition#getExpression()
*/
public String getExpression() {
return miBreakPoint.getWhat();
}
};
} }
return condition; return condition;
} }
@ -110,77 +87,11 @@ public class Breakpoint extends SessionObject implements ICDILocationBreakpoint,
*/ */
public ICDILocation getLocation() throws CDIException { public ICDILocation getLocation() throws CDIException {
if (location == null) { if (location == null) {
location = new ICDILocation () { location = new Location (miBreakPoint.getFile(),
/** miBreakPoint.getFunction(),
* @see org.eclipse.cdt.debug.core.cdi.ICDILocation#getAddress() miBreakPoint.getLine(),
*/ miBreakPoint.getAddress());
public long getAddress() {
return miBreakPoint.getAddress();
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDILocation#getFile()
*/
public String getFile() {
return miBreakPoint.getFile();
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDILocation#getFunction()
*/
public String getFunction() {
return miBreakPoint.getFunction();
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDILocation#getLineNumber()
*/
public int getLineNumber() {
return miBreakPoint.getLine();
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDILocation#getInstructions(int)
*/
public ICDIInstruction[] getInstructions(int maxCount)
throws CDIException {
return new ICDIInstruction[0];
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDILocation#getInstructions()
*/
public ICDIInstruction[] getInstructions() throws CDIException {
return new ICDIInstruction[0];
}
};
} }
return location; return location;
} }
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDICatchpoint#getEvent()
*/
public ICDICatchEvent getEvent() throws CDIException {
return null;
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint#getWatchExpression()
*/
public String getWatchExpression() throws CDIException {
return miBreakPoint.getWhat();
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint#isReadType()
*/
public boolean isReadType() {
return miBreakPoint.isReadWatchpoint();
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint#isWriteType()
*/
public boolean isWriteType() {
return miBreakPoint.isAccessWatchpoint();
}
} }

View file

@ -224,7 +224,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]); Watchpoint bkpt= new Watchpoint(this, points[0]);
breakList.add(bkpt); breakList.add(bkpt);
return bkpt; return bkpt;
} }

View file

@ -5,15 +5,13 @@
*/ */
package org.eclipse.cdt.debug.mi.core.cdi; package org.eclipse.cdt.debug.mi.core.cdi;
import java.io.InputStream; import java.util.ArrayList;
import java.io.OutputStream; import java.util.List;
import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDISession; import org.eclipse.cdt.debug.core.cdi.ICDISession;
import org.eclipse.cdt.debug.core.cdi.model.ICDIExpression;
import org.eclipse.cdt.debug.core.cdi.model.ICDIGlobalVariable; import org.eclipse.cdt.debug.core.cdi.model.ICDIGlobalVariable;
import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock; import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
import org.eclipse.cdt.debug.core.cdi.model.ICDIRegisterGroup; import org.eclipse.cdt.debug.core.cdi.model.ICDIRegisterGroup;
import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary;
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
@ -36,25 +34,33 @@ import org.eclipse.cdt.debug.mi.core.output.MIDataEvaluateExpressionInfo;
import org.eclipse.cdt.debug.mi.core.output.MIInfo; import org.eclipse.cdt.debug.mi.core.output.MIInfo;
/** /**
* @author alain
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/ */
public class CTarget implements ICDITarget { public class CTarget implements ICDITarget {
List threadList;
CSession session; CSession session;
public CTarget(CSession s) { public CTarget(CSession s) {
session = s; session = s;
threadList = new ArrayList(1);
} }
CSession getCSession() { CSession getCSession() {
return session; return session;
} }
void addCThread(CThread cthread) {
threadList.add(cthread);
}
void removeCThread(CThread cthread) {
threadList.remove(cthread);
}
CThread[] getCThreads() {
return (CThread[])threadList.toArray(new CThread[threadList.size()]);
}
/** /**
* @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#disconnect() * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#disconnect()
*/ */

View file

@ -20,13 +20,21 @@ import org.eclipse.cdt.debug.mi.core.output.MIStackListFramesInfo;
*/ */
public class CThread extends CObject implements ICDIThread { public class CThread extends CObject implements ICDIThread {
String id = ""; int id = 0;
public CThread(CTarget target, String threadId) { public CThread(CTarget target, int threadId) {
super(target); super(target);
id = threadId; id = threadId;
} }
int getId() {
return id;
}
public String toString() {
return "thread-" + Integer.toString(id);
}
/** /**
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#finish() * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#finish()
*/ */
@ -58,12 +66,13 @@ public class CThread extends CObject implements ICDIThread {
} }
} }
/** /*
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#isStepping() * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#isStepping()
*/ *
public boolean isStepping() { public boolean isStepping() {
return getTarget().isStepping(); return getTarget().isStepping();
} }
*/
/** /**
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#isSuspended() * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#isSuspended()

View file

@ -0,0 +1,22 @@
package org.eclipse.cdt.debug.mi.core.cdi;
import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDICatchEvent;
import org.eclipse.cdt.debug.core.cdi.ICDICatchpoint;
import org.eclipse.cdt.debug.mi.core.output.MIBreakPoint;
/**
*/
public class Catchpoint extends Breakpoint implements ICDICatchpoint {
public Catchpoint(BreakpointManager m, MIBreakPoint miBreak) {
super(m, miBreak);
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDICatchpoint#getEvent()
*/
public ICDICatchEvent getEvent() throws CDIException {
return null;
}
}

View file

@ -0,0 +1,30 @@
package org.eclipse.cdt.debug.mi.core.cdi;
import org.eclipse.cdt.debug.core.cdi.ICDICondition;
/**
*/
public class Condition implements ICDICondition {
int ignoreCount;
String expression;
public Condition(int ignore, String exp) {
ignoreCount = ignore;
expression = exp;
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDICondition#getIgnoreCount()
*/
public int getIgnoreCount() {
return ignoreCount;
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDICondition#getExpression()
*/
public String getExpression() {
return expression;
}
}

View file

@ -1,8 +1,8 @@
package org.eclipse.cdt.debug.mi.core.cdi; package org.eclipse.cdt.debug.mi.core.cdi;
import org.eclipse.cdt.debug.core.cdi.event.ICDISteppingEvent; import org.eclipse.cdt.debug.core.cdi.event.ICDIDestroyedEvent;
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject; import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
import org.eclipse.cdt.debug.mi.core.event.MIEvent; import org.eclipse.cdt.debug.mi.core.event.MIExitEvent;
/** /**
* @author alain * @author alain
@ -12,28 +12,21 @@ import org.eclipse.cdt.debug.mi.core.event.MIEvent;
* To enable and disable the creation of type comments go to * To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation. * Window>Preferences>Java>Code Generation.
*/ */
public class SteppingEvent implements ICDISteppingEvent { public class DestroyedEvent implements ICDIDestroyedEvent {
MIExitEvent event;
CSession session; CSession session;
MIEvent event;
public SteppingEvent(CSession s, MIEvent e) { public DestroyedEvent(CSession s, MIExitEvent e) {
session = s; session = s;
event = e; event = e;
} }
/**
* @see org.eclipse.cdt.debug.core.cdi.event.ICDISteppingEvent#getType()
*/
public int getType() {
return 0;
}
/** /**
* @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource() * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
*/ */
public ICDIObject getSource() { public ICDIObject getSource() {
return session.getTarget(); return null;
} }
} }

View file

@ -3,12 +3,6 @@ package org.eclipse.cdt.debug.mi.core.cdi;
import org.eclipse.cdt.debug.core.cdi.ICDIEndSteppingRange; import org.eclipse.cdt.debug.core.cdi.ICDIEndSteppingRange;
/** /**
* @author alain
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/ */
public class EndSteppingRange extends SessionObject implements ICDIEndSteppingRange { public class EndSteppingRange extends SessionObject implements ICDIEndSteppingRange {

View file

@ -9,37 +9,27 @@ import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent;
import org.eclipse.cdt.debug.mi.core.event.MILocationReachedEvent; import org.eclipse.cdt.debug.mi.core.event.MILocationReachedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent; import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent;
import org.eclipse.cdt.debug.mi.core.event.MISignalEvent; import org.eclipse.cdt.debug.mi.core.event.MISignalEvent;
import org.eclipse.cdt.debug.mi.core.event.MIStepEvent; import org.eclipse.cdt.debug.mi.core.event.MISteppingRangeEvent;
import org.eclipse.cdt.debug.mi.core.event.MIWatchpointEvent; import org.eclipse.cdt.debug.mi.core.event.MIWatchpointEvent;
/** /**
* @author alain
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/ */
public class EventAdapter { public class EventAdapter {
public static ICDIEvent getCDIEvent(CSession session, MIEvent miEvent) { public static ICDIEvent getCDIEvent(CSession session, MIEvent miEvent) {
if (miEvent instanceof MIBreakpointEvent) { if (miEvent instanceof MIBreakpointEvent
|| miEvent instanceof MIFunctionFinishedEvent
|| miEvent instanceof MILocationReachedEvent
|| miEvent instanceof MISignalEvent
|| miEvent instanceof MISteppingRangeEvent
|| miEvent instanceof MIWatchpointEvent) {
return new SuspendedEvent(session, miEvent); return new SuspendedEvent(session, miEvent);
} else if (miEvent instanceof MIInferiorExitEvent) {
} else if (miEvent instanceof MIExitEvent) {
} else if (miEvent instanceof MIFunctionFinishedEvent) {
} else if (miEvent instanceof MILocationReachedEvent) {
} else if (miEvent instanceof MISignalEvent) {
} else if (miEvent instanceof MIStepEvent) {
return new SuspendedEvent(session, miEvent);
} else if (miEvent instanceof MIWatchpointEvent) {
} else if (miEvent instanceof MIRunningEvent) { } else if (miEvent instanceof MIRunningEvent) {
MIRunningEvent running = (MIRunningEvent)miEvent; return new ResumedEvent(session, (MIRunningEvent)miEvent);
if (running.isStepping()) { } else if (miEvent instanceof MIInferiorExitEvent) {
return new SteppingEvent(session, miEvent); return new ExitedEvent(session, (MIInferiorExitEvent)miEvent);
} else { } else if (miEvent instanceof MIExitEvent) {
return new ResumedEvent(session, miEvent); return new DestroyedEvent(session, (MIExitEvent)miEvent);
}
} }
return null; return null;
} }

View file

@ -0,0 +1,20 @@
package org.eclipse.cdt.debug.mi.core.cdi;
import org.eclipse.cdt.debug.core.cdi.ICDIExitInfo;
/**.
*/
public class ExitInfo extends SessionObject implements ICDIExitInfo {
public ExitInfo(CSession session) {
super(session);
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIExitInfo#getCode()
*/
public int getCode() {
return getCSession().getCTarget().getProcess().exitValue();
}
}

View file

@ -0,0 +1,40 @@
package org.eclipse.cdt.debug.mi.core.cdi;
import org.eclipse.cdt.debug.core.cdi.ICDIExitInfo;
import org.eclipse.cdt.debug.core.cdi.event.ICDIExitedEvent;
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent;
/**
* @author alain
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class ExitedEvent implements ICDIExitedEvent {
MIInferiorExitEvent event;
CSession session;
public ExitedEvent(CSession s, MIInferiorExitEvent e) {
session = s;
event = e;
}
/**
* @see org.eclipse.cdt.debug.core.cdi.event.ICDIExitedEvent#getExitInfo()
*/
public ICDIExitInfo getExitInfo() {
return new ExitInfo(session);
}
/**
* @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
*/
public ICDIObject getSource() {
return session.getTarget();
}
}

View file

@ -6,6 +6,7 @@
package org.eclipse.cdt.debug.mi.core.cdi; package org.eclipse.cdt.debug.mi.core.cdi;
import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDICondition;
import org.eclipse.cdt.debug.core.cdi.ICDIExpressionManager; import org.eclipse.cdt.debug.core.cdi.ICDIExpressionManager;
import org.eclipse.cdt.debug.core.cdi.ICDISession; import org.eclipse.cdt.debug.core.cdi.ICDISession;
import org.eclipse.cdt.debug.core.cdi.model.ICDIExpression; import org.eclipse.cdt.debug.core.cdi.model.ICDIExpression;
@ -60,4 +61,11 @@ public class ExpressionManager extends SessionObject implements ICDIExpressionMa
return null; return null;
} }
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIExpressionManager#createCondition(int, String)
*/
public ICDICondition createCondition(int ignoreCount, String expression) {
return new Condition(ignoreCount, expression);
}
} }

View file

@ -19,6 +19,10 @@ public class Location implements ICDILocation {
String function = ""; String function = "";
int line; int line;
public Location(String f, String fnct, int l) {
this(f, fnct, l, 0);
}
public Location(String f, String fnct, int l, long a) { public Location(String f, String fnct, int l, long a) {
file = f; file = f;
function = fnct; function = fnct;

View file

@ -3,21 +3,16 @@ package org.eclipse.cdt.debug.mi.core.cdi;
import org.eclipse.cdt.debug.core.cdi.event.ICDIResumedEvent; import org.eclipse.cdt.debug.core.cdi.event.ICDIResumedEvent;
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject; import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
import org.eclipse.cdt.debug.mi.core.event.MIEvent; import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent;
/** /**
* @author alain
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/ */
public class ResumedEvent implements ICDIResumedEvent { public class ResumedEvent implements ICDIResumedEvent {
CSession session; CSession session;
MIEvent event; MIRunningEvent event;
public ResumedEvent(CSession s, MIEvent e) { public ResumedEvent(CSession s, MIRunningEvent e) {
session = s; session = s;
event = e; event = e;
} }
@ -29,4 +24,12 @@ public class ResumedEvent implements ICDIResumedEvent {
return session.getTarget(); return session.getTarget();
} }
/**
* @see org.eclipse.cdt.debug.core.cdi.event.ICDIResumedEvent#getType()
*/
public int getType() {
MIRunningEvent running = (MIRunningEvent)event;
return running.getType();
}
} }

View file

@ -0,0 +1,36 @@
package org.eclipse.cdt.debug.mi.core.cdi;
import org.eclipse.cdt.debug.core.cdi.ICDISignal;
import org.eclipse.cdt.debug.mi.core.event.MISignalEvent;
/**
* @author alain
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class Signal extends SessionObject implements ICDISignal {
MISignalEvent event;
public Signal(CSession session, MISignalEvent e) {
super(session);
event = e;
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDISignal#getMeaning()
*/
public String getMeaning() {
return event.getMeaning();
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDISignal#getName()
*/
public String getName() {
return event.getName();
}
}

View file

@ -8,6 +8,7 @@ package org.eclipse.cdt.debug.mi.core.cdi;
import java.io.File; import java.io.File;
import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDILocation;
import org.eclipse.cdt.debug.core.cdi.ICDISession; import org.eclipse.cdt.debug.core.cdi.ICDISession;
import org.eclipse.cdt.debug.core.cdi.ICDISourceManager; import org.eclipse.cdt.debug.core.cdi.ICDISourceManager;
@ -44,4 +45,11 @@ public class SourceManager extends SessionObject implements ICDISourceManager {
public void set(File[] directories) throws CDIException { public void set(File[] directories) throws CDIException {
} }
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDISourceManager#createLocation(String, String, int)
*/
public ICDILocation createLocation(String file, String function, int line) {
return new Location(file, function, line);
}
} }

View file

@ -6,10 +6,13 @@ import org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager;
import org.eclipse.cdt.debug.core.cdi.ICDISessionObject; import org.eclipse.cdt.debug.core.cdi.ICDISessionObject;
import org.eclipse.cdt.debug.core.cdi.event.ICDISuspendedEvent; import org.eclipse.cdt.debug.core.cdi.event.ICDISuspendedEvent;
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject; import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointEvent; import org.eclipse.cdt.debug.mi.core.event.MIBreakpointEvent;
import org.eclipse.cdt.debug.mi.core.event.MIEvent; import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIStepEvent; import org.eclipse.cdt.debug.mi.core.event.MIFunctionFinishedEvent;
import org.eclipse.cdt.debug.mi.core.event.MILocationReachedEvent;
import org.eclipse.cdt.debug.mi.core.event.MISignalEvent;
import org.eclipse.cdt.debug.mi.core.event.MISteppingRangeEvent;
import org.eclipse.cdt.debug.mi.core.event.MIWatchpointEvent;
import org.eclipse.cdt.debug.mi.core.output.MIBreakPoint; import org.eclipse.cdt.debug.mi.core.output.MIBreakPoint;
/** /**
@ -25,12 +28,13 @@ public class SuspendedEvent implements ICDISuspendedEvent {
event = e; event = e;
} }
public ICDISessionObject getReason() { public ICDISessionObject getReason() {
if (event instanceof MIBreakpointEvent) { if (event instanceof MIBreakpointEvent || event instanceof MIWatchpointEvent) {
MIBreakpointEvent breakEvent = (MIBreakpointEvent)event; MIBreakpointEvent breakEvent = (MIBreakpointEvent)event;
int number = breakEvent.getNumber(); int number = breakEvent.getNumber();
ICDIBreakpointManager mgr = session.getBreakpointManager(); ICDIBreakpointManager mgr = session.getBreakpointManager();
// Ask the breakpoint manager the array of ICDIBreakpoint(s)
// We need to return the same object as the reason.
try { try {
ICDIBreakpoint[] bkpts= mgr.getBreakpoints(); ICDIBreakpoint[] bkpts= mgr.getBreakpoints();
for (int i = 0; i < bkpts.length; i++) { for (int i = 0; i < bkpts.length; i++) {
@ -44,7 +48,13 @@ public class SuspendedEvent implements ICDISuspendedEvent {
} }
} catch (CDIException e) { } catch (CDIException e) {
} }
} else if (event instanceof MIStepEvent) { } else if (event instanceof MISteppingRangeEvent) {
return new EndSteppingRange(session);
} else if (event instanceof MISignalEvent) {
return new Signal(session, (MISignalEvent)event);
} else if (event instanceof MILocationReachedEvent) {
return new EndSteppingRange(session);
} else if (event instanceof MIFunctionFinishedEvent) {
return new EndSteppingRange(session); return new EndSteppingRange(session);
} }
return session; return session;
@ -54,21 +64,41 @@ public class SuspendedEvent implements ICDISuspendedEvent {
* @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource() * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
*/ */
public ICDIObject getSource() { public ICDIObject getSource() {
return new CThread(session.getCTarget(), ""); CTarget target = session.getCTarget();
} int threadId = 0;
/**
* @see org.eclipse.cdt.debug.core.cdi.event.ICDISuspendedEvent#getStackFrame()
*/
public ICDIStackFrame getStackFrame() {
if (event instanceof MIBreakpointEvent) { if (event instanceof MIBreakpointEvent) {
MIBreakpointEvent breakEvent = (MIBreakpointEvent)event; MIBreakpointEvent breakEvent = (MIBreakpointEvent)event;
return new StackFrame(session.getCTarget(), breakEvent.getMIFrame()); threadId = breakEvent.getThreadId();
} else if (event instanceof MIStepEvent) { } else if (event instanceof MIWatchpointEvent) {
MIStepEvent stepEvent = (MIStepEvent)event; MIWatchpointEvent watchEvent = (MIWatchpointEvent)event;
return new StackFrame(session.getCTarget(), stepEvent.getMIFrame()); threadId = watchEvent.getThreadId();
} else if (event instanceof MISteppingRangeEvent) {
MISteppingRangeEvent rangeEvent = (MISteppingRangeEvent)event;
threadId = rangeEvent.getThreadId();
} else if (event instanceof MISignalEvent) {
MISignalEvent sigEvent = (MISignalEvent)event;
threadId = sigEvent.getThreadId();
} else if (event instanceof MILocationReachedEvent) {
MILocationReachedEvent locEvent = (MILocationReachedEvent)event;
threadId = locEvent.getThreadId();
} else if (event instanceof MIFunctionFinishedEvent) {
MIFunctionFinishedEvent funcEvent = (MIFunctionFinishedEvent)event;
threadId = funcEvent.getThreadId();
} }
return null;
}
// If it came from a thread return it as the source.
if (threadId > 0) {
CThread[] cthreads = target.getCThreads();
for (int i = 0; i < cthreads.length; i++) {
if (cthreads[i].getId() == threadId) {
return cthreads[i];
}
}
// Not found?? new thread created?
CThread cthread = new CThread(session.getCTarget(), threadId);
target.addCThread(cthread);
return cthread;
}
return target;
}
} }

View file

@ -0,0 +1,42 @@
package org.eclipse.cdt.debug.mi.core.cdi;
import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint;
import org.eclipse.cdt.debug.mi.core.output.MIBreakPoint;
/**
* @author alain
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class Watchpoint extends Breakpoint implements ICDIWatchpoint {
public Watchpoint(BreakpointManager m, MIBreakPoint miBreak) {
super(m, miBreak);
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint#getWatchExpression()
*/
public String getWatchExpression() throws CDIException {
return getMIBreakPoint().getWhat();
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint#isReadType()
*/
public boolean isReadType() {
return getMIBreakPoint().isReadWatchpoint();
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint#isWriteType()
*/
public boolean isWriteType() {
return getMIBreakPoint().isAccessWatchpoint();
}
}

View file

@ -14,18 +14,22 @@ import org.eclipse.cdt.debug.mi.core.output.MIValue;
*/ */
public class MIRunningEvent extends MIEvent { public class MIRunningEvent extends MIEvent {
boolean isStep; public static final int CONTINUE = 1;
public static final int NEXT = 1;
public static final int NEXTI = 2;
public static final int STEP = 3;
public static final int STEPI = 4;
public static final int FINISH = 5;
public static final int UNTIL = 6;
public MIRunningEvent() { int type;
this(false);
public MIRunningEvent(int t) {
type = t;
} }
public MIRunningEvent(boolean step) { public int getType() {
isStep = step; return type;
}
public boolean isStepping() {
return isStep;
} }
public String toString() { public String toString() {

View file

@ -32,11 +32,11 @@ public class MISignalEvent extends MIEvent {
parse(); parse();
} }
public String getSignalName() { public String getName() {
return sigName; return sigName;
} }
public String getSignalMeaning() { public String getMeaning() {
return sigMeaning; return sigMeaning;
} }

View file

@ -12,7 +12,7 @@ import org.eclipse.cdt.debug.mi.core.output.MIValue;
* *
* *stopped,reason="end-stepping-range",thread-id="0",frame={addr="0x08048538",func="main",args=[{name="argc",value="1"},{name="argv",value="0xbffff18c"}],file="hello.c",line="13"} * *stopped,reason="end-stepping-range",thread-id="0",frame={addr="0x08048538",func="main",args=[{name="argc",value="1"},{name="argv",value="0xbffff18c"}],file="hello.c",line="13"}
*/ */
public class MIStepEvent extends MIEvent { public class MISteppingRangeEvent extends MIEvent {
int threadId; int threadId;
MIFrame frame; MIFrame frame;
@ -20,12 +20,12 @@ public class MIStepEvent extends MIEvent {
MIExecAsyncOutput exec; MIExecAsyncOutput exec;
MIResultRecord rr; MIResultRecord rr;
public MIStepEvent(MIExecAsyncOutput record) { public MISteppingRangeEvent(MIExecAsyncOutput record) {
exec = record; exec = record;
parse(); parse();
} }
public MIStepEvent(MIResultRecord record) { public MISteppingRangeEvent(MIResultRecord record) {
rr = record; rr = record;
parse(); parse();
} }