diff --git a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog index 8629eecf0a8..07447f74a86 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog @@ -1,3 +1,10 @@ +2004-10-19 Alain Magloire + Fix Core Launching + * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java + * mi/org/eclipse/cdt/debug/mi/core/CoreProcess.java + * mi/org/eclipse/cdt/debug/mi/core/MIInferior.java + * src/org/eclipse/cdt/debug/mi/core/MIPlugin.java + 2004-10-18 Alain Magloire Adjust to changes in CDI * src/org/eclipse/cdt/debug/mi/core/cdi/model/RuntimeOptions.java diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/CoreFileConfiguration.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/CoreFileConfiguration.java index f5db90ecd31..0acf6d0d209 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/CoreFileConfiguration.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/CoreFileConfiguration.java @@ -82,6 +82,6 @@ public class CoreFileConfiguration implements ICDIConfiguration { * @see org.eclipse.cdt.debug.core.cdi.ICDIConfiguration#terminateSessionOnExit() */ public boolean terminateSessionOnExit() { - return false; + return true; } } diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java index 40f94397fbf..cd4ca40ddf2 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java @@ -25,6 +25,7 @@ import org.eclipse.cdt.debug.core.cdi.model.ICDISignal; import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; import org.eclipse.cdt.debug.core.cdi.model.ICDIThread; import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint; +import org.eclipse.cdt.debug.mi.core.CoreProcess; import org.eclipse.cdt.debug.mi.core.MIException; import org.eclipse.cdt.debug.mi.core.MISession; import org.eclipse.cdt.debug.mi.core.cdi.BreakpointManager; @@ -684,6 +685,9 @@ public class Target implements ICDITarget { * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getProcess() */ public Process getProcess() { + if (miSession.isCoreSession()) { + return new CoreProcess(); + } return miSession.getMIInferior(); } diff --git a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/CoreProcess.java b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/CoreProcess.java new file mode 100644 index 00000000000..a852cdc7136 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/CoreProcess.java @@ -0,0 +1,74 @@ +/********************************************************************** + * Copyright (c) 2002,2003,2004 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * QNX Software Systems - Initial API and implementation +***********************************************************************/ +package org.eclipse.cdt.debug.mi.core; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/* + * CoreProcess + */ +public class CoreProcess extends Process { + + /* (non-Javadoc) + * @see java.lang.Process#exitValue() + */ + public int exitValue() { + return 0; + } + + /* (non-Javadoc) + * @see java.lang.Process#waitFor() + */ + public int waitFor() throws InterruptedException { + return 0; + } + + /* (non-Javadoc) + * @see java.lang.Process#destroy() + */ + public void destroy() { + } + + /* (non-Javadoc) + * @see java.lang.Process#getErrorStream() + */ + public InputStream getErrorStream() { + return new InputStream() { + public int read() throws IOException { + return -1; + } + }; + } + + /* (non-Javadoc) + * @see java.lang.Process#getInputStream() + */ + public InputStream getInputStream() { + return new InputStream() { + public int read() throws IOException { + return -1; + } + }; + } + + /* (non-Javadoc) + * @see java.lang.Process#getOutputStream() + */ + public OutputStream getOutputStream() { + return new OutputStream() { + public void write(int b) throws IOException { + } + }; + } + +} diff --git a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/MIInferior.java b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/MIInferior.java index 7e24a0a8aee..57d3d38300d 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/MIInferior.java +++ b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/MIInferior.java @@ -165,7 +165,8 @@ public class MIInferior extends Process { // to kill a disconnected program). // - For Program session: // if the inferior was not terminated. - // - For PostMortem(Core): noop + // - For PostMortem(Core): send event + // else noop if ((session.isAttachSession() && isConnected()) || (session.isProgramSession() && !isTerminated())) { CommandFactory factory = session.getCommandFactory(); @@ -175,6 +176,8 @@ public class MIInferior extends Process { session.postCommand(abort); abort.getMIInfo(); setTerminated(abort.getToken(), true); + } else if (session.isCoreSession()){ + setTerminated(0, true); } } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIPlugin.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIPlugin.java index bd68cda23c1..7bbdd839406 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIPlugin.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIPlugin.java @@ -232,6 +232,8 @@ public class MIPlugin extends Plugin { MISession session; try { session = createMISession(pgdb, null, MISession.CORE); + //@@@ We have to manually set the suspended state when doing post-mortem + session.getMIInferior().setSuspended(); } catch (MIException e) { pgdb.destroy(); throw e;