mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-11 18:25:40 +02:00
Bug 463977 - Exit code not always displayed in console
Change-Id: I6342cd55530eeb1ea9faf52cd26884065f069ebd Signed-off-by: Marc Khouzam <marc.khouzam@ericsson.com>
This commit is contained in:
parent
95bff0bb50
commit
db8179004f
1 changed files with 45 additions and 32 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2011, 2013 Ericsson and others.
|
* Copyright (c) 2011, 2015 Ericsson and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -15,7 +15,6 @@ import java.util.Map;
|
||||||
|
|
||||||
import org.eclipse.cdt.dsf.gdb.IGdbDebugConstants;
|
import org.eclipse.cdt.dsf.gdb.IGdbDebugConstants;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.debug.core.DebugException;
|
|
||||||
import org.eclipse.debug.core.ILaunch;
|
import org.eclipse.debug.core.ILaunch;
|
||||||
import org.eclipse.debug.core.ILaunchConfiguration;
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
import org.eclipse.debug.core.model.IProcess;
|
import org.eclipse.debug.core.model.IProcess;
|
||||||
|
@ -37,43 +36,57 @@ public class InferiorRuntimeProcess extends RuntimeProcess {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void terminated() {
|
protected void terminated() {
|
||||||
super.terminated();
|
// We must set the console label before calling super.terminated()
|
||||||
|
// This is because super.terminated() will send an event to rename
|
||||||
|
// the console, and we find ourselves in a race condition
|
||||||
|
// where we may miss setting the label here (bug 463977)
|
||||||
setConsoleTerminatedLabel();
|
setConsoleTerminatedLabel();
|
||||||
|
|
||||||
|
super.terminated();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inspired from org.eclipse.debug.internal.ui.views.console.ProcessConsole#computeName
|
|
||||||
// We set the IProcess.ATTR_PROCESS_LABEL to modify the console title but not the process label
|
|
||||||
// of the debug view. Overriding getLabel() affects the element in the debug view also, so
|
|
||||||
// we don't do that.
|
|
||||||
private void setConsoleTerminatedLabel() {
|
private void setConsoleTerminatedLabel() {
|
||||||
String label = getLabel();
|
|
||||||
|
|
||||||
String type = null;
|
|
||||||
ILaunchConfiguration config = getLaunch().getLaunchConfiguration();
|
|
||||||
try {
|
|
||||||
type = config.getType().getName();
|
|
||||||
} catch (CoreException e) {
|
|
||||||
}
|
|
||||||
StringBuffer buffer = new StringBuffer();
|
|
||||||
buffer.append(config.getName());
|
|
||||||
if (type != null) {
|
|
||||||
buffer.append(" ["); //$NON-NLS-1$
|
|
||||||
buffer.append(type);
|
|
||||||
buffer.append("] "); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
buffer.append(label);
|
|
||||||
|
|
||||||
if (getAttribute(IGdbDebugConstants.INFERIOR_EXITED_ATTR) != null) {
|
if (getAttribute(IGdbDebugConstants.INFERIOR_EXITED_ATTR) != null) {
|
||||||
// Add the exit code to the label if the inferior properly exited.
|
// Add the exit code to the title of the console if the inferior properly exited.
|
||||||
|
int exitValue = 0;
|
||||||
try {
|
try {
|
||||||
buffer.insert(0, MessageFormat.format(LaunchMessages.getString("InferiorRuntimeProcess_ExitValue"), //$NON-NLS-1$
|
// We have to explicitly get the exit code from the lower level process
|
||||||
new Object[] { getExitValue() }));
|
// instead of calling getExitValue() because we have not yet indicated
|
||||||
} catch (DebugException e) {
|
// that this wrapper process has terminated by calling super.terminated()
|
||||||
// Process not terminated. Should not happen. But even so, we should use the plain label.
|
// Bug 463977
|
||||||
|
exitValue = getSystemProcess().exitValue();
|
||||||
|
} catch (IllegalThreadStateException e) {
|
||||||
|
// Process not terminated. Should not happen. Use default behavior.
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
label = buffer.toString();
|
|
||||||
|
|
||||||
setAttribute(IProcess.ATTR_PROCESS_LABEL, label);
|
// Inspired from org.eclipse.debug.internal.ui.views.console.ProcessConsole#computeName
|
||||||
|
// We set the IProcess.ATTR_PROCESS_LABEL to modify the console title but not the process label
|
||||||
|
// of the debug view. Overriding getLabel() affects the element in the debug view also, so
|
||||||
|
// we don't do that.
|
||||||
|
String label = getLabel();
|
||||||
|
|
||||||
|
String type = null;
|
||||||
|
ILaunchConfiguration config = getLaunch().getLaunchConfiguration();
|
||||||
|
try {
|
||||||
|
type = config.getType().getName();
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
StringBuffer buffer = new StringBuffer();
|
||||||
|
buffer.append(config.getName());
|
||||||
|
if (type != null) {
|
||||||
|
buffer.append(" ["); //$NON-NLS-1$
|
||||||
|
buffer.append(type);
|
||||||
|
buffer.append("] "); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
buffer.append(label);
|
||||||
|
|
||||||
|
// Prefix with exit value
|
||||||
|
buffer.insert(0, MessageFormat.format(LaunchMessages.getString("InferiorRuntimeProcess_ExitValue"), //$NON-NLS-1$
|
||||||
|
new Object[] { exitValue }));
|
||||||
|
label = buffer.toString();
|
||||||
|
|
||||||
|
setAttribute(IProcess.ATTR_PROCESS_LABEL, label);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue