diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SignalManager.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SignalManager.java index 53f83a40ca8..5bc0c7d82ea 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SignalManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SignalManager.java @@ -16,6 +16,7 @@ import org.eclipse.cdt.debug.mi.core.MIException; import org.eclipse.cdt.debug.mi.core.MISession; import org.eclipse.cdt.debug.mi.core.cdi.model.Signal; import org.eclipse.cdt.debug.mi.core.command.CommandFactory; +import org.eclipse.cdt.debug.mi.core.command.MIHandle; import org.eclipse.cdt.debug.mi.core.command.MIInfoSignals; import org.eclipse.cdt.debug.mi.core.event.MIEvent; import org.eclipse.cdt.debug.mi.core.event.MISignalChangedEvent; @@ -44,6 +45,9 @@ public class SignalManager extends SessionObject implements ICDISignalManager { try { mi.postCommand(sigs); MIInfoSignalsInfo info = sigs.getMIInfoSignalsInfo(); + if (info == null) { + throw new CDIException("No answer"); + } miSigs = info.getMISignals(); } catch (MIException e) { throw new MI2CDIException(e); @@ -60,6 +64,9 @@ public class SignalManager extends SessionObject implements ICDISignalManager { try { mi.postCommand(sigs); MIInfoSignalsInfo info = sigs.getMIInfoSignalsInfo(); + if (info == null) { + throw new CDIException("No answer"); + } MISignal[] miSigs = info.getMISignals(); if (miSigs.length > 0) { sig = miSigs[0]; @@ -107,6 +114,32 @@ public class SignalManager extends SessionObject implements ICDISignalManager { return sig; } + public void handle(ICDISignal sig, boolean isIgnore, boolean isStop) throws CDIException { + Session session = (Session)getSession(); + MISession mi = session.getMISession(); + CommandFactory factory = mi.getCommandFactory(); + StringBuffer buffer = new StringBuffer(sig.getName()); + buffer.append(" "); + if (isIgnore) { + buffer.append("ignore"); + } else { + buffer.append("noignore"); + } + buffer.append(" "); + if (isStop) { + buffer.append("stop"); + } else { + buffer.append("nostop"); + } + MIHandle handle = factory.createMIHandle(buffer.toString()); + try { + mi.postCommand(handle); + handle.getMIInfo(); + } catch (MIException e) { + throw new MI2CDIException(e); + } + } + /** * @see org.eclipse.cdt.debug.core.cdi.ICDISignalManager#getSignals() */ diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Signal.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Signal.java index dcf6267fd86..4442d8b2388 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Signal.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Signal.java @@ -19,6 +19,7 @@ public class Signal extends CObject implements ICDISignal { public Signal(SignalManager m, MISignal s) { super(m.getSession().getCurrentTarget()); + mgr = m; sig = s; } @@ -44,6 +45,7 @@ public class Signal extends CObject implements ICDISignal { * @see org.eclipse.cdt.debug.core.cdi.ICDISignalReceived#handle() */ public void handle(boolean ignore, boolean stop) throws CDIException { + mgr.handle(this, ignore, stop); } /**