Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor_7_0.java')
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor_7_0.java35
1 files changed, 35 insertions, 0 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor_7_0.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor_7_0.java
index 39a7384b25d..d179514749d 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor_7_0.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIRunControlEventProcessor_7_0.java
@@ -15,6 +15,8 @@ package org.eclipse.cdt.dsf.mi.service.command;
import java.util.LinkedList;
import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor;
import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -54,6 +56,7 @@ import org.eclipse.cdt.dsf.mi.service.command.events.MIThreadGroupCreatedEvent;
import org.eclipse.cdt.dsf.mi.service.command.events.MIThreadGroupExitedEvent;
import org.eclipse.cdt.dsf.mi.service.command.events.MIWatchpointScopeEvent;
import org.eclipse.cdt.dsf.mi.service.command.events.MIWatchpointTriggerEvent;
+import org.eclipse.cdt.dsf.mi.service.command.output.MIConsoleStreamOutput;
import org.eclipse.cdt.dsf.mi.service.command.output.MIConst;
import org.eclipse.cdt.dsf.mi.service.command.output.MIExecAsyncOutput;
import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
@@ -270,6 +273,38 @@ public class MIRunControlEventProcessor_7_0
fCommandControl.getSession().dispatchEvent(event, fCommandControl.getProperties());
}
}
+ } else if (oobr instanceof MIConsoleStreamOutput) {
+ MIConsoleStreamOutput stream = (MIConsoleStreamOutput) oobr;
+ if (stream.getCString().startsWith("Program terminated with signal")) {//$NON-NLS-1$
+
+ /*
+ * The string should be in the form "Program terminated with signal <signal>, <reason>."
+ * For Example: Program terminated with signal SIGABRT, Aborted.
+ */
+
+ // Parse the <signal> and the <reason>
+ Pattern pattern = Pattern.compile("Program terminated with signal (.*), (.*)\\..*"); //$NON-NLS-1$
+ Matcher matcher = pattern.matcher(stream.getCString());
+ if (matcher.matches()) {
+ MIExecAsyncOutput exec = new MIExecAsyncOutput();
+
+ MIResult name = new MIResult();
+ name.setVariable("signal-name"); //$NON-NLS-1$
+ MIConst nameValue = new MIConst();
+ nameValue.setCString(matcher.group(1));
+ name.setMIValue(nameValue);
+
+ MIResult meaning = new MIResult();
+ meaning.setVariable("signal-meaning"); //$NON-NLS-1$
+ MIConst meaningValue = new MIConst();
+ meaningValue.setCString(matcher.group(2));
+ meaning.setMIValue(meaningValue);
+
+ exec.setMIResults(new MIResult[] { name, meaning });
+ MIEvent<?> event = createEvent("signal-received", exec); //$NON-NLS-1$
+ fCommandControl.getSession().dispatchEvent(event, fCommandControl.getProperties());
+ }
+ }
}
}
}

Back to the top