Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Dallaway2021-04-18 20:24:53 +0000
committerJohn Dallaway2021-04-25 18:39:03 +0000
commit5e9fc0024228992f9f434c503ef14f8ad89c84ee (patch)
tree976464b97c280785ffd3092c2e268160c1098730 /dsf-gdb/org.eclipse.cdt.dsf.gdb
parent3c58527d534b44c1f67fe5c85d28be90e81789a8 (diff)
downloadorg.eclipse.cdt-5e9fc0024228992f9f434c503ef14f8ad89c84ee.tar.gz
org.eclipse.cdt-5e9fc0024228992f9f434c503ef14f8ad89c84ee.tar.xz
org.eclipse.cdt-5e9fc0024228992f9f434c503ef14f8ad89c84ee.zip
Bug 572944: Set GDB process attributes
Diffstat (limited to 'dsf-gdb/org.eclipse.cdt.dsf.gdb')
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb/.settings/.api_filters11
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb/META-INF/MANIFEST.MF2
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunch.java62
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend.java17
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend_7_12.java5
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/IGDBBackend.java13
6 files changed, 61 insertions, 49 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/.settings/.api_filters b/dsf-gdb/org.eclipse.cdt.dsf.gdb/.settings/.api_filters
new file mode 100644
index 00000000000..678c0084daa
--- /dev/null
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/.settings/.api_filters
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.cdt.dsf.gdb" version="2">
+ <resource path="src/org/eclipse/cdt/dsf/gdb/service/IGDBBackend.java" type="org.eclipse.cdt.dsf.gdb.service.IGDBBackend">
+ <filter id="404000815">
+ <message_arguments>
+ <message_argument value="org.eclipse.cdt.dsf.gdb.service.IGDBBackend"/>
+ <message_argument value="getDebuggerCommandLineArray()"/>
+ </message_arguments>
+ </filter>
+ </resource>
+</component>
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/META-INF/MANIFEST.MF b/dsf-gdb/org.eclipse.cdt.dsf.gdb/META-INF/MANIFEST.MF
index 4e421bc64c9..4b353fc32b7 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/META-INF/MANIFEST.MF
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-SymbolicName: org.eclipse.cdt.dsf.gdb;singleton:=true
-Bundle-Version: 6.3.0.qualifier
+Bundle-Version: 6.4.0.qualifier
Bundle-Activator: org.eclipse.cdt.dsf.gdb.internal.GdbPlugin
Bundle-Localization: plugin
Require-Bundle: org.eclipse.core.runtime,
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunch.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunch.java
index 2d07991d859..2ff36fd4ee6 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunch.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunch.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2018 Wind River Systems and others.
+ * Copyright (c) 2006, 2021 Wind River Systems and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -14,20 +14,17 @@
* Marc Khouzam (Ericsson) - Create the gdb process through the process factory (Bug 210366)
* Alvaro Sanchez-Leon (Ericsson AB) - Each memory context needs a different MemoryRetrieval (Bug 250323)
* John Dallaway - Resolve variables using launch context (Bug 399460)
+ * John Dallaway - Set GDB process attributes (Bug 572944)
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.launching;
-import java.io.BufferedReader;
import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
import java.util.Properties;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
@@ -40,6 +37,7 @@ import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager;
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.parser.util.StringUtil;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
@@ -66,6 +64,7 @@ import org.eclipse.cdt.dsf.gdb.IGdbDebugConstants;
import org.eclipse.cdt.dsf.gdb.IGdbDebugPreferenceConstants;
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
import org.eclipse.cdt.dsf.gdb.internal.memory.GdbMemoryBlockRetrievalManager;
+import org.eclipse.cdt.dsf.gdb.service.IGDBBackend;
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
import org.eclipse.cdt.dsf.service.DsfServiceEventHandler;
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
@@ -92,6 +91,7 @@ import org.eclipse.debug.core.IStatusHandler;
import org.eclipse.debug.core.commands.IDebugCommandRequest;
import org.eclipse.debug.core.commands.IDisconnectHandler;
import org.eclipse.debug.core.commands.ITerminateHandler;
+import org.eclipse.debug.core.model.IProcess;
import org.eclipse.debug.core.model.ISourceLocator;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.core.target.launch.ITargetedLaunch;
@@ -210,11 +210,25 @@ public class GdbLaunch extends DsfLaunch implements ITracedLaunch, ITargetedLaun
}
}).get();
+ IGDBBackend gdbBackend = getDsfExecutor().submit(new Callable<IGDBBackend>() {
+ @Override
+ public IGDBBackend call() throws CoreException {
+ return fTracker.getService(IGDBBackend.class);
+ }
+ }).get();
+
+ // Set process attributes for presentation in process properties page
+ Map<String, String> attributes = new HashMap<>();
+ attributes.put(IProcess.ATTR_CMDLINE, StringUtil.join(gdbBackend.getDebuggerCommandLineArray(), "\n")); //$NON-NLS-1$
+ attributes.put(DebugPlugin.ATTR_ENVIRONMENT, StringUtil.join(getLaunchEnvironment(), "\n")); //$NON-NLS-1$
+ attributes.put(DebugPlugin.ATTR_LAUNCH_TIMESTAMP, Long.toString(System.currentTimeMillis()));
+ Optional.ofNullable(gdbBackend.getGDBWorkingDirectory()).map(IPath::toOSString)
+ .ifPresent(dir -> attributes.put(DebugPlugin.ATTR_WORKING_DIRECTORY, dir));
+
// Need to go through DebugPlugin.newProcess so that we can use
// the overrideable process factory to allow others to override.
// First set attribute to specify we want to create the gdb process.
// Bug 210366
- Map<String, String> attributes = new HashMap<>();
attributes.put(IGdbDebugConstants.PROCESS_TYPE_CREATION_ATTR,
IGdbDebugConstants.GDB_PROCESS_CREATION_VALUE);
DebugPlugin.newProcess(this, gdbProc, label, attributes);
@@ -515,40 +529,6 @@ public class GdbLaunch extends DsfLaunch implements ITracedLaunch, ITargetedLaun
}
/**
- * Read from the specified stream and return what was read.
- *
- * @param stream
- * The input stream to be used to read the data. This method will
- * close the stream.
- * @return The data read from the stream
- * @throws IOException
- * If an IOException happens when reading the stream
- */
- private static String readStream(InputStream stream) throws IOException {
- StringBuilder cmdOutput = new StringBuilder(200);
- try {
- Reader r = new InputStreamReader(stream);
- BufferedReader reader = new BufferedReader(r);
-
- String line;
- while ((line = reader.readLine()) != null) {
- cmdOutput.append(line);
- cmdOutput.append('\n');
- }
- return cmdOutput.toString();
- } finally {
- // Cleanup to avoid leaking pipes
- // Bug 345164
- if (stream != null) {
- try {
- stream.close();
- } catch (IOException e) {
- }
- }
- }
- }
-
- /**
* Gets the CDT environment from the CDT project's configuration referenced
* by the launch. This environment is used as the environment to run GDB in
* and is different than the launch environment in ILaunchManager.ATTR_ENVIRONMENT_VARIABLES
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend.java
index ad8b76ce30a..2cbd4b38842 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2015 Wind River Systems, Nokia and others.
+ * Copyright (c) 2006, 2021 Wind River Systems, Nokia and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -15,6 +15,7 @@
* Marc Khouzam (Ericsson) - Use the new IMIBackend2 interface (Bug 350837)
* Mark Bozeman (Mentor Graphics) - Report GDB start failures (Bug 376203)
* Iulia Vasii (Freescale Semiconductor) - Separate GDB command from its arguments (Bug 445360)
+ * John Dallaway - Implement getDebuggerCommandLineArray() method (Bug 572944)
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.service;
@@ -176,9 +177,9 @@ public class GDBBackend extends AbstractDsfService implements IGDBBackend, IMIBa
* array. Allow subclass to override.
*
* @since 4.6
- * @deprecated Replaced by getDebuggerCommandLine()
+ * @deprecated Override {@link #getDebuggerCommandLineArray()} instead
*/
- @Deprecated
+ @Deprecated(since = "5.2", forRemoval = true)
protected String[] getGDBCommandLineArray() {
// The goal here is to keep options to an absolute minimum.
// All configuration should be done in the final launch sequence
@@ -196,10 +197,17 @@ public class GDBBackend extends AbstractDsfService implements IGDBBackend, IMIBa
return CommandLineUtil.argumentsToArray(cmd);
}
+ @Override
+ public String[] getDebuggerCommandLineArray() {
+ // Call the deprecated method which might be overridden
+ return getDebuggerCommandLine();
+ }
+
/**
* Returns the GDB command and its arguments as an array.
* Allow subclass to override.
* @since 5.2
+ * @deprecated Override {@link #getDebuggerCommandLineArray()} instead
*/
// This method replaces getGDBCommandLineArray() because we need
// to override it for GDB 7.12 even if an extender has overridden
@@ -224,6 +232,7 @@ public class GDBBackend extends AbstractDsfService implements IGDBBackend, IMIBa
// Note that we didn't name this method getGDBCommandLine() because
// this name had been used in CDT 8.8 and could still be part of
// extenders' code.
+ @Deprecated(since = "6.4", forRemoval = true)
protected String[] getDebuggerCommandLine() {
// Call the old method in case it was overridden
return getGDBCommandLineArray();
@@ -294,7 +303,7 @@ public class GDBBackend extends AbstractDsfService implements IGDBBackend, IMIBa
// not starting the full GDB console properly.
protected Process launchGDBProcess() throws CoreException {
// Call the old method in case it was overridden
- return launchGDBProcess(getDebuggerCommandLine());
+ return launchGDBProcess(getDebuggerCommandLineArray());
}
/**
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend_7_12.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend_7_12.java
index 5c2b57162c5..2c2b1286009 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend_7_12.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend_7_12.java
@@ -123,13 +123,14 @@ public class GDBBackend_7_12 extends GDBBackend {
return fDummyErrorStream;
}
+ /** @deprecated Override {@link #getDebuggerCommandLineArray()} instead */
@Override
+ @Deprecated(since = "6.4", forRemoval = true)
protected String[] getDebuggerCommandLine() {
// Start from the original command line method which
// could have been overridden by extenders, and add what we need
// to convert it to a command that will launch in CLI mode.
// Then trigger the MI console
- @SuppressWarnings("deprecation")
String[] originalCommandLine = getGDBCommandLineArray();
if (!isFullGdbConsoleSupported()) {
@@ -195,7 +196,7 @@ public class GDBBackend_7_12 extends GDBBackend {
// If we are launching the full console, we need to use a PTY in TERMINAL mode
// for the GDB CLI to properly display in its view
Process proc = null;
- String[] commandLine = getDebuggerCommandLine();
+ String[] commandLine = getDebuggerCommandLineArray();
try {
fCLIPty = new PTY(Mode.TERMINAL);
IPath path = getGDBWorkingDirectory();
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/IGDBBackend.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/IGDBBackend.java
index 96d39dfd0d9..f58b992c791 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/IGDBBackend.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/IGDBBackend.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008, 2011 Nokia Corporation.
+ * Copyright (c) 2008, 2021 Nokia Corporation.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -11,6 +11,7 @@
* Contributors:
* Nokia - initial version
* Ericsson - Minor cleanup
+ * John Dallaway - Add getDebuggerCommandLineArray() method (Bug 572944)
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.service;
@@ -86,6 +87,16 @@ public interface IGDBBackend extends IMIBackend {
public IPath getGDBWorkingDirectory() throws CoreException;
/**
+ * Get the command line used to invoke GDB.
+ *
+ * @return String[] - the GDB command and its arguments as an array
+ * @since 6.4
+ */
+ default String[] getDebuggerCommandLineArray() {
+ return new String[0];
+ }
+
+ /**
* @throws CoreException
* - error in getting the option.
*/

Back to the top