From 324bc25ac90d349ecb03983d5d98cd776900c8e4 Mon Sep 17 00:00:00 2001 From: John Cortell Date: Tue, 2 Mar 2010 22:54:49 +0000 Subject: [PATCH] [304433] Get ProgramRelatvePathSourceContainer to support DSF's ability to debug a binary outside a project --- .../ProgramRelativePathSourceContainer.java | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/sourcelookup/ProgramRelativePathSourceContainer.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/sourcelookup/ProgramRelativePathSourceContainer.java index aad6fd3dc19..c1aeeaf8685 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/sourcelookup/ProgramRelativePathSourceContainer.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/sourcelookup/ProgramRelativePathSourceContainer.java @@ -143,11 +143,16 @@ public class ProgramRelativePathSourceContainer extends AbstractSourceContainer{ return fProgramPath; // return empty path } - // get current project + // Get current project. Unlike CDI, DSF supports debugging + // executables that are not in an Eclipse project, so this may be + // null for a DSF session. See bugzilla 304433. + ICProject project = null; String projectName = configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String)null); - ICProject project = CoreModel.getDefault().getCModel().getCProject(projectName); - if (project == null || !project.exists()) { - return fProgramPath; // return empty path + if (projectName != null) { + project = CoreModel.getDefault().getCModel().getCProject(projectName); + if (project == null || !project.exists()) { + return fProgramPath; // return empty path + } } // get program name @@ -159,7 +164,23 @@ public class ProgramRelativePathSourceContainer extends AbstractSourceContainer{ // get executable file IFile exeFile = null; try { - exeFile = project.getProject().getFile(new Path(programName)); + if (project != null) { + exeFile = project.getProject().getFile(new Path(programName)); + } + else { + // A DSF launch config need not reference a project. Try + // treating program name as either an absolute path or a + // path relative to the working directory + IPath path = new Path(programName); + if (path.toFile().exists()) { + fProgramPath = path; + return fProgramPath; + } + else { + return fProgramPath; // return empty path + } + } + } catch (IllegalArgumentException e){ return fProgramPath; // return empty path