/******************************************************************************* * Copyright (c) 2008, 2015 Ericsson and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Ericsson - Initial API and implementation * Marc Khouzam (Ericsson) - Display exit code in process console (Bug 402054) *******************************************************************************/ package org.eclipse.cdt.dsf.mi.service.command.events; import org.eclipse.cdt.dsf.concurrent.Immutable; import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext; import org.eclipse.cdt.dsf.mi.service.command.output.MIConst; import org.eclipse.cdt.dsf.mi.service.command.output.MIResult; import org.eclipse.cdt.dsf.mi.service.command.output.MIValue; /** * This can only be detected by gdb/mi starting with GDB 7.0. * @since 1.1 */ @Immutable public class MIThreadGroupExitedEvent extends MIEvent<IProcessDMContext> { private String fGroupId; private String fExitCode; /** @since 4.2 */ public MIThreadGroupExitedEvent(IProcessDMContext ctx, int token, MIResult[] results) { super(ctx, token, results); parse(); } public String getGroupId() { return fGroupId; } /** * Returns the exit code of the process or null if there is no exit code. * Note that this information is only available with GDB 7.3; * null will be returned for older GDB versions. * * @since 4.2 */ public String getExitCode() { return fExitCode; } private void parse() { MIResult[] results = getResults(); if (results == null) return; for (int i = 0; i < results.length; i++) { String var = results[i].getVariable(); MIValue val = results[i].getMIValue(); if (var.equals("id")) { //$NON-NLS-1$ if (val instanceof MIConst) { fGroupId = ((MIConst) val).getString().trim(); } } else if (var.equals("exit-code")) { //$NON-NLS-1$ // Available starting with GDB 7.3. // Only present when the process properly exited if (val instanceof MIConst) { fExitCode = ((MIConst) val).getString().trim(); } } } } }