mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 22:52:11 +02:00
Bug 496818 - Cannot find executable if working directory is not default
Originally, to determine the program path, GDBBackend's constructor
would call:
ICProject cproject = LaunchUtils.getCProject(lc);
fProgramPath = LaunchUtils.verifyProgramPath(lc, cproject);
When we made the change in 192bfff688
we
didn't keep that logic and lost some functionality.
This commit re-instates the original logic.
Change-Id: Ifbee2273517c41ad6ebdc9980261ed36d651f130
This commit is contained in:
parent
972aeb3d0b
commit
783787af25
1 changed files with 52 additions and 25 deletions
|
@ -70,6 +70,7 @@ import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
import org.eclipse.cdt.utils.CommandLineUtil;
|
import org.eclipse.cdt.utils.CommandLineUtil;
|
||||||
import org.eclipse.cdt.utils.spawner.ProcessFactory;
|
import org.eclipse.cdt.utils.spawner.ProcessFactory;
|
||||||
import org.eclipse.core.resources.IContainer;
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
|
@ -617,27 +618,7 @@ public class GdbLaunch extends DsfLaunch implements ITerminate, IDisconnect, ITr
|
||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public String[] getLaunchEnvironment() throws CoreException {
|
public String[] getLaunchEnvironment() throws CoreException {
|
||||||
// Get the project
|
IProject project = getProject();
|
||||||
String projectName = getLaunchConfiguration().getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME,
|
|
||||||
(String) null);
|
|
||||||
IProject project = null;
|
|
||||||
if (projectName == null) {
|
|
||||||
IResource[] resources = getLaunchConfiguration().getMappedResources();
|
|
||||||
if (resources != null && resources.length > 0 && resources[0] instanceof IProject) {
|
|
||||||
project = (IProject) resources[0];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
projectName = projectName.trim();
|
|
||||||
if (projectName.length() == 0) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (project == null || !project.isAccessible()) {
|
|
||||||
// No project
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
HashMap<String, String> envMap = new HashMap<String, String>();
|
HashMap<String, String> envMap = new HashMap<String, String>();
|
||||||
ICProjectDescription projDesc = CoreModel.getDefault().getProjectDescription(project, false);
|
ICProjectDescription projDesc = CoreModel.getDefault().getProjectDescription(project, false);
|
||||||
|
@ -691,6 +672,30 @@ public class GdbLaunch extends DsfLaunch implements ITerminate, IDisconnect, ITr
|
||||||
return strings.toArray(new String[strings.size()]);
|
return strings.toArray(new String[strings.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IProject getProject() throws CoreException {
|
||||||
|
String projectName = getLaunchConfiguration().getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME,
|
||||||
|
(String) null);
|
||||||
|
IProject project = null;
|
||||||
|
if (projectName == null) {
|
||||||
|
IResource[] resources = getLaunchConfiguration().getMappedResources();
|
||||||
|
if (resources != null && resources.length > 0 && resources[0] instanceof IProject) {
|
||||||
|
project = (IProject) resources[0];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
projectName = projectName.trim();
|
||||||
|
if (projectName.length() == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (project == null || !project.isAccessible()) {
|
||||||
|
// No project
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return project;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the location of the gdbinit file.
|
* Get the location of the gdbinit file.
|
||||||
*
|
*
|
||||||
|
@ -797,12 +802,34 @@ public class GdbLaunch extends DsfLaunch implements ITerminate, IDisconnect, ITr
|
||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public String getProgramPath() throws CoreException {
|
public String getProgramPath() throws CoreException {
|
||||||
String programPath = getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME);
|
String programName = getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME);
|
||||||
if (programPath == null) {
|
if (programName == null) {
|
||||||
programPath = getLaunchConfiguration().getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME,
|
programName = getLaunchConfiguration().getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME,
|
||||||
(String) null);
|
(String) null);
|
||||||
}
|
}
|
||||||
return programPath;
|
if (programName == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
programName = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(programName);
|
||||||
|
IPath programPath = new Path(programName);
|
||||||
|
if (programPath.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!programPath.isAbsolute()) {
|
||||||
|
IProject project = getProject();
|
||||||
|
ICProject cproject = CCorePlugin.getDefault().getCoreModel().create(project);
|
||||||
|
if (cproject != null) {
|
||||||
|
// Find the specified program within the specified project
|
||||||
|
IFile wsProgramPath = cproject.getProject().getFile(programPath);
|
||||||
|
programPath = wsProgramPath.getLocation();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!programPath.toFile().exists()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return programPath.toOSString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Reference in a new issue