public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: rmoseley@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: New start/run to accept parameters.
Date: Tue, 15 Jan 2008 07:22:00 -0000	[thread overview]
Message-ID: <20080115072204.25443.qmail@sourceware.org> (raw)

The branch, master has been updated
       via  d69fbcf1960423fa8f87fc0a61dcbc4aab25657b (commit)
      from  d9d1870cc5ebfd5e4f99383b75b4f63b93c415e2 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit d69fbcf1960423fa8f87fc0a61dcbc4aab25657b
Author: Rick Moseley <rmoseley@localhost.localdomain>
Date:   Tue Jan 15 01:21:41 2008 -0600

    New start/run to accept parameters.
    
            * StartRun.java: New, consolidation of Start/RunCommand.
            * StartCommand.java: Move common code to StartRun.java.
            * RunCommand.java: Ditto.
            * TestStartCommand.java: Modify for above changes.
            * TestRunCommand.java: Ditto.
            * TestBreakpoints.java: Ditto.
            * TestListCommand.java: Ditto.
            * TestGenerateCoreCommand.java: Ditto.
            * LoadCommand.java: Improve help verbage.
            * TestLoadCommand.java: Add quit command at end of test.

-----------------------------------------------------------------------

Summary of changes:
 frysk-core/frysk/hpd/ChangeLog                     |   13 ++
 frysk-core/frysk/hpd/LoadCommand.java              |    9 +-
 frysk-core/frysk/hpd/RunCommand.java               |  184 ++----------------
 frysk-core/frysk/hpd/StartCommand.java             |  183 ++----------------
 .../frysk/hpd/{StartCommand.java => StartRun.java} |  204 ++++++++++++-------
 frysk-core/frysk/hpd/TestBreakpoints.java          |   22 ++-
 frysk-core/frysk/hpd/TestGenerateCoreCommand.java  |   97 ++++++----
 frysk-core/frysk/hpd/TestListCommand.java          |   21 ++-
 frysk-core/frysk/hpd/TestLoadCommand.java          |    3 +-
 frysk-core/frysk/hpd/TestRunCommand.java           |    9 +-
 frysk-core/frysk/hpd/TestStartCommand.java         |    9 +-
 11 files changed, 289 insertions(+), 465 deletions(-)
 copy frysk-core/frysk/hpd/{StartCommand.java => StartRun.java} (54%)

First 500 lines of diff:
diff --git a/frysk-core/frysk/hpd/ChangeLog b/frysk-core/frysk/hpd/ChangeLog
index 1b3321d..50cf389 100644
--- a/frysk-core/frysk/hpd/ChangeLog
+++ b/frysk-core/frysk/hpd/ChangeLog
@@ -1,3 +1,16 @@
+2008-01-15  Rick Moseley  <rmoseley@redhat.com>
+
+	* StartRun.java: New, consolidation of Start/RunCommand.
+	* StartCommand.java: Move common code to StartRun.java.
+	* RunCommand.java: Ditto.
+	* TestStartCommand.java: Modify for above changes.
+	* TestRunCommand.java: Ditto.
+	* TestBreakpoints.java: Ditto.
+	* TestListCommand.java: Ditto.
+	* TestGenerateCoreCommand.java: Ditto.
+	* LoadCommand.java: Improve help verbage.
+	* TestLoadCommand.java: Add quit command at end of test.
+
 2008-01-14  Mike Cvet  <mcvet@redhat.com>
 
 	* StepInstructionCommand.java (interpret): Changed from iterating over
diff --git a/frysk-core/frysk/hpd/LoadCommand.java b/frysk-core/frysk/hpd/LoadCommand.java
index b330da9..0d2bb30 100644
--- a/frysk-core/frysk/hpd/LoadCommand.java
+++ b/frysk-core/frysk/hpd/LoadCommand.java
@@ -60,7 +60,14 @@ import java.util.List;
 public class LoadCommand extends ParameterizedCommand {
 
     LoadCommand() {
-	super("load", "load path-to-executable", "load an executable file");
+	super("load", 
+	      "load path-to-executable", 
+	      "The load command lets the user examine information about"
+	      + " an executable file without actually running it.  An"
+	      + " executble must be loaded with this command before it"
+	      + " can be run with either the 'start' or 'run' command."
+	      + " No arguments are entered here, they are passed to the"
+	      + " process via the 'start'/'run' commands.");
     }
 
     public void interpret(CLI cli, Input cmd, Object options) {
diff --git a/frysk-core/frysk/hpd/RunCommand.java b/frysk-core/frysk/hpd/RunCommand.java
index a7307aa..f78fb5e 100644
--- a/frysk-core/frysk/hpd/RunCommand.java
+++ b/frysk-core/frysk/hpd/RunCommand.java
@@ -39,180 +39,26 @@
 
 package frysk.hpd;
 
-import frysk.proc.Action;
-import frysk.proc.Manager;
-import frysk.proc.Proc;
-import frysk.proc.ProcObserver.ProcTasks;
-import frysk.proc.ProcTasksObserver;
-import frysk.proc.Task;
-import frysk.proc.TaskObserver;
-import frysk.util.CountDownLatch;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-class RunCommand extends ParameterizedCommand {
+class RunCommand extends StartRun {
     // Used to synchronize with updateAttached method
     RunCommand() {
 	super("run program and immediately attach",
-	      "run <executable> <arguments*>",
-	      "The run command alllows the debuger to run a(any) program(s)"
-	      + " that has(have) been previously loaded via a load command"
-	      + " if no parameters are given. To run an executable, just"
-	      + " give the run command the path to the executable as a"
-	      + " parameter.  In either case the debugger attaches immediately"
-	      + " to the process.");
-    }
-
-    private static class Runner implements TaskObserver.Attached {
-	private final CLI cli;
-	private CountDownLatch latch;
-	Task launchedTask;
-	Runner(CLI cli) {
-	    this.cli = cli;
-	}
-	public Action updateAttached(final Task task) {
-	    final Proc proc = task.getProc();
-	    synchronized (this) {
-		launchedTask = task;
-	    }
-	    synchronized (cli) {
-		cli.getRunningProcs().add(proc);
-	    }
-	    new ProcTasksObserver(proc, new ProcTasks() {
-		    public void existingTask(Task task) {
-		    }
-		    
-		    public void addedTo(Object observable) {
-		    }
-		    
-		    public void addFailed(Object observable, Throwable w) {
-		    }
-		    
-		    public void deletedFrom(Object observable) {
-		    }
-		    
-		    public void taskAdded(Task task) {
-		    }
-		    
-		    public void taskRemoved(Task task) {
-			if (proc.getChildren().size() == 0) {
-			    synchronized (cli) {
-				HashSet procs = cli.getRunningProcs();
-				procs.remove(proc);
-			    }
-			}
-		    }
-		});
-	    latch.countDown();
-	    // Keep task blocked until the SteppingEngine notifies us that its
-	    // instruction observers, etc. have been inserted.
-	    return Action.BLOCK;
-	}
-
-	public void addedTo(Object observable) {
-	}
-
-	public void addFailed(Object observable, Throwable w) {
-	    System.out.println("couldn't get it done:" + w);
-	}
-
-	public void deletedFrom(Object observable) {
-	}
-
+	      "run <arguments*> || <--norags>",
+	      "The run command alllows the debugger to run a(any) program(s)"
+	      + " that has(have) been previously loaded via a load or"
+	      + " core command.  The run command can accept arguments to"
+	      + " be passed to the executable or if arguments have been"
+	      + " previously given and no arguments are desired for the"
+	      + " next run, use '--noargs' and the executable(s) will not be"
+	      + " passed any arguments.  The run command causes the executable"
+	      + " to be run until the first breakpoint or until the process"
+	      + " terminates either normally or abnormally.  Issuing the run"
+	      + " command at any point in the debugging sequence cause the"
+	      + " process(es) being worked on to tbe killed and a fresh copy"
+	      + " to be reloaded and run until breakpoint or termination.");
     }
 
     public void interpret(CLI cli, Input cmd, Object options) {
-	/* If the run command is given no args, check to see if 
-	   any procs were loaded with the load command or loaded
-	   when fhpd was started or loaded with the core command*/
-	Iterator foo = cli.targetset.getTasks();
-	if (cmd.size() < 1 && foo.hasNext()) {
-	    if (cli.coreProcs.isEmpty() && cli.loadedProcs.isEmpty()) {
-		cli.execCommand("kill");
-		cli.execCommand("start");
-		cli.execCommand("go");
-		return;
-	    }
-	} else if (cmd.size() < 1 && !foo.hasNext()) {
-	    cli.addMessage("No procs in targetset to run", 
-		    Message.TYPE_NORMAL);
-	    return;
-	}
-	
-	// If a parameter was given the run command, go ahead and run it
-	if (cmd.size() >= 1) {
-	    run(cli, cmd);
-	    cli.execCommand("go");
-	    return;
-	}
-	
-	/* If we made it here, a run command was given with no parameters
-	 * and there should be either running procs or loaded procs or
-	 * core procs
-	 */
-
-	/* This is the case where there are loaded procs */
-	if (!cli.loadedProcs.isEmpty()) {
-	    Set procSet = cli.loadedProcs.entrySet();
-	    runProcs(cli, procSet);
-	    synchronized (cli) {
-		cli.loadedProcs.clear();
-	    }
-	}
-	
-	/* Check to see if there were procs loaded from a core command */
-	if (!cli.coreProcs.isEmpty()) {
-	    Set coreSet = cli.coreProcs.entrySet();
-	    runProcs(cli, coreSet);
-	    synchronized (cli) {
-		cli.coreProcs.clear();
-	    }
-	} 
-    }
-	
-    private void run(CLI cli, Input cmd) {
-	Runner runner = new Runner(cli);
-	Manager.host.requestCreateAttachedProc(cmd.stringArrayValue(), runner);
-        while (true) {
-            try {
-        	runner.latch = new CountDownLatch(1);
-                runner.latch.await();
-                break;
-            } catch (InterruptedException e) {
-            }
-        }
-        // register with SteppingEngine et.al.
-        cli.doAttach(runner.launchedTask.getProc());
-	runner.launchedTask.requestUnblock(runner);
-    }
-    
-    /*
-     * runProcs does as the name implies, it runs procs found to be loaded by a
-     * load or a core command.
-     */
-    private void runProcs(CLI cli, Set procs) {
-	Iterator foo = procs.iterator();
-	while (foo.hasNext()) {
-	    Map.Entry me = (Map.Entry) foo.next();
-	    Proc proc = (Proc) me.getKey();
-	    Integer taskid = (Integer) me.getValue();
-	    // Set the TaskID to be used to what was used when the
-	    // proc was loaded with the core or load commands
-	    synchronized (cli) {
-		cli.taskID = taskid.intValue();
-	    }
-	    cli.execCommand("run " + proc.getExe());
-	    synchronized (cli) {
-		cli.taskID = -1;
-	    }
-	}
-    }
-    
-    int completer(CLI cli, Input input, int cursor, List completions) {
-	return CompletionFactory.completeFileName(cli, input, cursor,
-						  completions);
+	interpretRun(cli, cmd, options);
     }
 }
diff --git a/frysk-core/frysk/hpd/StartCommand.java b/frysk-core/frysk/hpd/StartCommand.java
index baf58a1..4e5ea2d 100644
--- a/frysk-core/frysk/hpd/StartCommand.java
+++ b/frysk-core/frysk/hpd/StartCommand.java
@@ -39,178 +39,25 @@
 
 package frysk.hpd;
 
-import frysk.proc.Action;
-import frysk.proc.Manager;
-import frysk.proc.Proc;
-import frysk.proc.ProcObserver.ProcTasks;
-import frysk.proc.ProcTasksObserver;
-import frysk.proc.Task;
-import frysk.proc.TaskObserver;
-import frysk.util.CountDownLatch;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-class StartCommand extends ParameterizedCommand {
+class StartCommand extends StartRun {
     
     StartCommand() {
-	super("start a process, run until the first executable instruction",
-		"start <executable>",
-		"The start command alllows the debuger to run a(any) program(s)"
-		      + " that has(have) either been previously loaded via a load command"
-		      + " if no parameters are given. To run an executable, just"
-		      + " give the start command the path to the executable as a"
-		      + " parameter.  In either case the debugger attaches immediately"
-		      + " to the process and runs to the first executable instruction.");
-    }
-    
-    private static class Runner implements TaskObserver.Attached {
-	private final CLI cli;
-	private CountDownLatch latch;
-	Task launchedTask;
-	Runner(CLI cli) {
-	    this.cli = cli;
-	}
-	public Action updateAttached(final Task task) {
-	    final Proc proc = task.getProc();
-	    synchronized (this) {
-		launchedTask = task;
-	    }
-	    synchronized (cli) {
-		cli.getRunningProcs().add(proc);
-	    }
-	    new ProcTasksObserver(proc, new ProcTasks() {
-		    public void existingTask(Task task) {
-		    }
-		    
-		    public void addedTo(Object observable) {
-		    }
-		    
-		    public void addFailed(Object observable, Throwable w) {
-		    }
-		    
-		    public void deletedFrom(Object observable) {
-		    }
-		    
-		    public void taskAdded(Task task) {
-		    }
-		    
-		    public void taskRemoved(Task task) {
-			if (proc.getChildren().size() == 0) {
-			    synchronized (cli) {
-				HashSet procs = cli.getRunningProcs();
-				procs.remove(proc);
-			    }
-			}
-		    }
-		});
-	    latch.countDown();
-	    // Keep task blocked until the SteppingEngine notifies us that its
-	    // instruction observers, etc. have been inserted.
-	    return Action.BLOCK;
-	}
-
-	public void addedTo(Object observable) {
-	}
-
-	public void addFailed(Object observable, Throwable w) {
-	    System.out.println("couldn't get it done:" + w);
-	}
-
-	public void deletedFrom(Object observable) {
-	}
+	super("start a previously-loaded process, run until the first executable instruction",
+		"start <arguments*> || <--noargs>",
+		"The start command alllows the debugger to run a(any) process(es)"
+		      + " that has(have) either been previously loaded via a load"
+		      + " or a core command.  The difference between the run and"
+		      + " start command is that start only runs the program until"
+		      + " the first executable instruction.  Arguments can be passed to"
+		      + " the process by entering them after the command.  If arguments"
+		      + " have previously been passed to the and the next requires"
+		      + " no arguments use '--noargs' as the only argument.  Issuing"
+		      + " the start command at any time in the debug session will"
+		      + " kill the process being debugged and reload a new copy of the"
+		      + " process and run to the first executable instruction.");
     }
     
     public void interpret(CLI cli, Input cmd, Object options) {
-	/* If the run command is given no args, check to see if 
-	   any procs were loaded with the load command or loaded
-	   when fhpd was started or loaded with the core command*/
-	Iterator foo = cli.targetset.getTasks();
-	if (cmd.size() < 1 && foo.hasNext()) {
-	    if (cli.coreProcs.isEmpty() && cli.loadedProcs.isEmpty()) {
-		cli.execCommand("kill");
-		cli.execCommand("start");
-		return;
-	    }
-	} else if (cmd.size() < 1 && !foo.hasNext()) {
-	    cli.addMessage("No procs in targetset to run", 
-		    Message.TYPE_NORMAL);
-	    return;
-	}
-	
-	// If a parameter was given the run command, go ahead and run it
-	if (cmd.size() >= 1) {
-	    
-	    run(cli, cmd);
-	    return;
-	}
-	
-	/* If we made it here, a run command was given with no parameters
-	 * and there should be either running procs or loaded procs or
-	 * core procs
-	 */
-
-	/* This is the case where there are loaded procs */
-	if (!cli.loadedProcs.isEmpty()) {
-	    Set procSet = cli.loadedProcs.entrySet();
-	    runProcs(cli, procSet);
-	    synchronized (cli) {
-		cli.loadedProcs.clear();
-	    }
-	}
-	
-	/* Check to see if there were procs loaded from a core command */
-	if (!cli.coreProcs.isEmpty()) {
-	    Set coreSet = cli.coreProcs.entrySet();
-	    runProcs(cli, coreSet);
-	    synchronized (cli) {
-		cli.coreProcs.clear();
-	    }
-	} 
-    }
-	
-    private void run(CLI cli, Input cmd) {
-	Runner runner = new Runner(cli);
-	Manager.host.requestCreateAttachedProc(cmd.stringArrayValue(), runner);
-        while (true) {
-            try {
-        	runner.latch = new CountDownLatch(1);
-                runner.latch.await();
-                break;
-            } catch (InterruptedException e) {
-            }
-        }
-        // register with SteppingEngine et.al.
-        cli.doAttach(runner.launchedTask.getProc());
-	runner.launchedTask.requestUnblock(runner);
-    }
-    
-    /*
-     * runProcs does as the name implies, it runs procs found to be loaded by a
-     * load or a core command.
-     */
-    private void runProcs(CLI cli, Set procs) {
-	Iterator foo = procs.iterator();
-	while (foo.hasNext()) {
-	    Map.Entry me = (Map.Entry) foo.next();
-	    Proc proc = (Proc) me.getKey();
-	    Integer taskid = (Integer) me.getValue();
-	    // Set the TaskID to be used to what was used when the
-	    // proc was loaded with the core or load commands
-	    synchronized (cli) {
-		cli.taskID = taskid.intValue();
-	    }
-	    cli.execCommand("start " + proc.getExe());
-	    synchronized (cli) {
-		cli.taskID = -1;
-	    }
-	}
-    }
-    
-    int completer(CLI cli, Input input, int cursor, List completions) {
-	return CompletionFactory.completeFileName(cli, input, cursor,
-						  completions);
+	interpretStart(cli, cmd, options);
     }
 }
\ No newline at end of file
diff --git a/frysk-core/frysk/hpd/StartCommand.java b/frysk-core/frysk/hpd/StartRun.java
similarity index 54%
copy from frysk-core/frysk/hpd/StartCommand.java
copy to frysk-core/frysk/hpd/StartRun.java
index baf58a1..c8f340c 100644
--- a/frysk-core/frysk/hpd/StartCommand.java
+++ b/frysk-core/frysk/hpd/StartRun.java
@@ -53,26 +53,27 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-class StartCommand extends ParameterizedCommand {
+/**
+ * Due to a lot of similar code in StartCommand/RunCommand this class was
+ * created to consolidate most of the methods to one code base.
+ */
+class StartRun extends ParameterizedCommand {
     
-    StartCommand() {
-	super("start a process, run until the first executable instruction",
-		"start <executable>",
-		"The start command alllows the debuger to run a(any) program(s)"
-		      + " that has(have) either been previously loaded via a load command"
-		      + " if no parameters are given. To run an executable, just"
-		      + " give the start command the path to the executable as a"
-		      + " parameter.  In either case the debugger attaches immediately"
-		      + " to the process and runs to the first executable instruction.");
-    }
+    boolean runToBreak = false;
     
-    private static class Runner implements TaskObserver.Attached {
-	private final CLI cli;
-	private CountDownLatch latch;
+    StartRun(String command, String help1, String help2) {
+	super(command, help1, help2);
+    }
+
+    static class Runner implements TaskObserver.Attached {
+	final CLI cli;
+	CountDownLatch latch;
 	Task launchedTask;
+
 	Runner(CLI cli) {
 	    this.cli = cli;
 	}
+
 	public Action updateAttached(final Task task) {
 	    final Proc proc = task.getProc();
 	    synchronized (this) {
@@ -82,30 +83,30 @@ class StartCommand extends ParameterizedCommand {
 		cli.getRunningProcs().add(proc);
 	    }
 	    new ProcTasksObserver(proc, new ProcTasks() {
-		    public void existingTask(Task task) {
-		    }
-		    
-		    public void addedTo(Object observable) {
-		    }
-		    
-		    public void addFailed(Object observable, Throwable w) {


hooks/post-receive
--
frysk system monitor/debugger


                 reply	other threads:[~2008-01-15  7:22 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080115072204.25443.qmail@sourceware.org \
    --to=rmoseley@sourceware.org \
    --cc=frysk-cvs@sourceware.org \
    --cc=frysk@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).