1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-10 09:45:39 +02:00

Implemented get and adding to the gdb search source paths.

This commit is contained in:
Alain Magloire 2002-09-24 03:38:52 +00:00
parent 2e5306c7b2
commit 97fb504d21
4 changed files with 116 additions and 10 deletions

View file

@ -6,8 +6,6 @@
package org.eclipse.cdt.debug.mi.core.cdi;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDISourceManager;
@ -15,6 +13,8 @@ import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MISession;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIEnvironmentDirectory;
import org.eclipse.cdt.debug.mi.core.command.MIGDBShowDirectories;
import org.eclipse.cdt.debug.mi.core.output.MIGDBShowDirectoriesInfo;
import org.eclipse.cdt.debug.mi.core.output.MIInfo;
@ -22,11 +22,8 @@ import org.eclipse.cdt.debug.mi.core.output.MIInfo;
*/
public class SourceManager extends SessionObject implements ICDISourceManager {
List sourcePaths;
public SourceManager(CSession session) {
super(session);
sourcePaths = new ArrayList();
}
/**
@ -61,16 +58,22 @@ public class SourceManager extends SessionObject implements ICDISourceManager {
} catch (MIException e) {
throw new CDIException(e.getMessage());
}
for (int i = 0; i < dirs.length; i++) {
sourcePaths.add(dirs[i]);
}
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDISourceManager#getSourcePaths()
*/
public String[] getSourcePaths() {
return (String[])sourcePaths.toArray(new String[0]);
public String[] getSourcePaths() throws CDIException {
MISession mi = getCSession().getMISession();
CommandFactory factory = mi.getCommandFactory();
MIGDBShowDirectories dir = factory.createMIGDBShowDirectories();
try {
mi.postCommand(dir);
MIGDBShowDirectoriesInfo info = dir.getMIGDBShowDirectoriesInfo();
return info.getDirectories();
} catch (MIException e) {
throw new CDIException(e.getMessage());
}
}
/**

View file

@ -171,6 +171,10 @@ public class CommandFactory {
return new MIGDBShowExitCode();
}
public MIGDBShowDirectories createMIGDBShowDirectories() {
return new MIGDBShowDirectories();
}
public MIStackInfoDepth createMIStackInfoDepth(int depth) {
return new MIStackInfoDepth(depth);
}

View file

@ -0,0 +1,40 @@
/*
*(c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*
*/
package org.eclipse.cdt.debug.mi.core.command;
import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.output.MIGDBShowDirectoriesInfo;
import org.eclipse.cdt.debug.mi.core.output.MIInfo;
import org.eclipse.cdt.debug.mi.core.output.MIOutput;
/**
*
* -gdb-show directories
*
* Show the current value of a GDB variable(directories).
*
*/
public class MIGDBShowDirectories extends MIGDBShow {
public MIGDBShowDirectories() {
super(new String[] { "directories" });
}
public MIGDBShowDirectoriesInfo getMIGDBShowDirectoriesInfo() throws MIException {
return (MIGDBShowDirectoriesInfo)getMIInfo();
}
public MIInfo getMIInfo() throws MIException {
MIInfo info = null;
MIOutput out = getMIOutput();
if (out != null) {
info = new MIGDBShowDirectoriesInfo(out);
if (info.isError()) {
throw new MIException(info.getErrorMsg());
}
}
return info;
}
}

View file

@ -0,0 +1,59 @@
/*
* (c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*/
package org.eclipse.cdt.debug.mi.core.output;
import java.util.StringTokenizer;
/**
* GDB/MI show parsing.
* (gdb)
* -gdb-show directories
* ~"Source directories searched: /tmp:$cdir:$cwd\n"
* ^done
*/
public class MIGDBShowDirectoriesInfo extends MIInfo {
String[] dirs = new String[0];
public MIGDBShowDirectoriesInfo(MIOutput o) {
super(o);
parse();
}
public String[] getDirectories() {
return dirs;
}
void parse() {
if (isDone()) {
MIOutput out = getMIOutput();
MIOOBRecord[] oobs = out.getMIOOBRecords();
for (int i = 0; i < oobs.length; i++) {
if (oobs[i] instanceof MIConsoleStreamOutput) {
MIStreamRecord cons = (MIStreamRecord)oobs[i];
String str = cons.getString();
if (str.startsWith("Source directories searched:")) {
int j = str.indexOf(':');
if (j != -1) {
String sub = str.substring(j + 1).trim();
parseDirectories(sub);
}
}
}
}
}
}
void parseDirectories(String d) {
String sep = System.getProperty("path.separator", ":");
StringTokenizer st = new StringTokenizer(d, sep);
int count = st.countTokens();
dirs = new String[count];
for (int i = 0; st.hasMoreTokens() && i < count; i++) {
dirs[i] = (String)st.nextToken();
}
}
}