Commits

Anonymous committed c664f41

fixup commit for tag 'sumo-current'

Comments (0)

Files changed (31)

+JDE-2.1.9 Release Notes
+
+***************************************************************
+*                         PLEASE READ                         *
+***************************************************************
+*                                                             *
+* This release requires semantic 1.2 (or later) and           *
+* speedbar 0.11.1 or later. You can obtain both at            *
+*  http://www.ultranet.com/~zappo/semantic.shtml              *
+*                                                             *
+***************************************************************
+
+* Simplified and rationalized the way JDEbug connects Emacs to 
+  the debuggee app's standard I/O.
+
+  The new implementation eliminates the spurious "input error"
+  message when an application ends.
+
+* jde-sort-imports now works on XEmacs.
+
+  Thanks to "Dr. Volker Zell" <Dr.Volker.Zell@oracle.com> for
+  this fix.
+
+* Replaced current semantic bovinator Java parser with a more rigorous parser modeled
+  on that included in the Java CUP package.
+
+  Thanks to David Ponce <david@dponce.com>  for contributing the new grammar.
+
+* Get/set pair template now generates correct method name for getting 
+  the value of boolean variables. 
+
+  Thanks to Stephane <s.nicolas@videotron.ca> for contributing this fix.
+
+* Added sort option to Classes index menu. 
+
+  Thanks to David Ponce for this contribution.
+
+* The JDE now sets the variable abbrevs-changed to nil after initializing
+  the abbrev-mode table for a Java source buffer. This is intended to
+  prevent Emacs from thinking that the abbreviations need to be save
+  the next time you save the source file.
+
+* Added a section on the Classes menu to the JDE User's Guide.
+
+
+JDE-2.1.8 Release Notes
+
+* The javadoc command now works for class fields as well as methods
+  and classes. Thanks to David Ponce for <david@dponce.com>
+  for this enhancement.
+
+* The JDE's Lisp-based Java grammar has been extended to cover many
+  more Java constructs. 
+
+  This results in more complete indexing of Java buffers, especially fields. 
+  Thanks to David Ponce for contributing many of the grammar improvements.
+
+* The JDE's import and other wizards now work for Java extension classes.
+
+  Thanks to Mark Gibson <mark@markg.co.uk> for this improvement.
+
+* The import wizard dialog now uses radio buttons rather than check boxes
+  to select the class to import.
+
+  Thanks to Mark Gibson for this enhancement.
+
+* The Classes index menu now can include (default) or omit
+  the types of fields as well as method signatures of all 
+  classes in the current buffer. 
+
+  USe the variable jde-imenu-include-signature to enable/disable this
+  feature.
+
+  Thanks to David Ponce for this enhancement.
+
+* The Classes index menu now includes (the default) or omits an index
+  for each class declaration in the current buffer.
+
+  Use the variable jde-imenu-include-classdef to include/omit class def
+  entries.
+
+  Thanks to David Ponce for this enhancement.
+
+* Changed the name of jde-enable-index-menu to jde-imenu-enable and 
+  jde-enable-full-method-signatures-index-menu to 
+  jde-imenu-include signature.
+
+
+
+JDE-2.1.7 Release Notes
+
+* Added an entry to the JDEbug user guide about the need to set 
+  jde-run-classic-mode-vm on when using JDK 1.3
+
+* Added transient to the list of variable modifiers in the 
+  java.bnf grammar.
+
+  Thanks to Mike Bowler for reporting this problem and thanks to
+  David Ponce for providing a fix.
+
+* Classes index menu now shows full signatures of methods. 
+  
+  Thanks to Ittay Freiman <ittay@vigiltech.com> for suggesting this
+  enhancement and to David Ponce <david@dponce.com> for implementing it.
+
+* Added automatic generation of javadoc comment skeletons.
+
+  To generate a skeleton for the method or class at point, 
+  select JDE->Document or type C-C C-v j. To customize the
+  skeletons, select JDE->Project->Options->Javadoc.
+
+  Thanks to David Ponce <david@dponce.com> for providing this
+  feature.
+
+* The import wizard now checks whether an import statement already
+  exists for the class at point and if so does not generate an
+  unnecessary duplicate.
+
+  Thanks to Jim LoVerde<loverde@str.com> for contributing this
+  enhancement.
+
+* Parser now handles arrays in field declarations.
+
+  Thanks to Ittay Freiman <ittay@vigiltech.com> for reporting this bug.
+
+
+JDE-2.1.6 Release Notes
+
+=====================================================================
+NOTE: This releases requires version 0.10 (or later) of Eric Ludlam's 
+speedbar and version 1.1beta (or later) of Eric's semantic bovinator.
+You can download both packages from
+
+http://www.ultranet.com/~zappo/semantic.shtml
+=====================================================================
+
+* The *Rescan* item on the Classes menu now works.
+
+* Updated grammar to handle argument variables with modifiers 
+  and array arguments.
+
+* Updated grammar to handle final methods.
+
+* Fixed user guide's table of contents to work in browsers that
+  do not support Java.
+
+* Added variable jde-bug-raise-frame-p to allow a user to 
+  specify whether the Emacs window should pop up when a
+  breakpoint is hit.
+
+* Fixed compatiblity bug that prevented JDEbug menu from appearing 
+  in the XEmacs menubar.
+
+* Fixed stepping bug cause by missing jde-bug-install-jdebug-menu.
+
+* Completion menu now works on XEmacs.
+
+* Adds jde-sort-imports command contributed by 
+  David Ponce <david_ponce@mail.schneider.fr>.
+
+  This command sorts the import statements in the current buffer
+  in ascending or descending order by package name.
+
+* Abbreviations now disabled in comments and strings.
+
+  Thanks to Eric D. Friedman <friedman@lmi.net> for this fix.
+
+* Adds control flow templates contributed by Eric D. Friedman <friedman@lmi.net>.
+
+  The templates provide completion for the following control flow statements:
+
+  Statement                  Abbreviation
+  ----------------------------------------
+  if-then                    if
+  else                       else
+  if-then-else               ife
+  while                      while
+  for                        for
+  for (int I=0;I<UL;I++)     fori
+  main method                main
+  switch                     switch
+  case                       case
+
+  NOTE: you must enable the JDE's abbreviation mode to use the templates.
+  See jde-enable-abbrev-mode.
+  
+  To use a template, enter the abbreviation followed by a space. Some
+  templates optionally prompt you to fill in the skeleton. To enable 
+  prompting, set the variable tempo-interactive to a non-nil value in
+  your .emacs file.
+
+  You can customize the templates to suit your indentation style. To 
+  customize the templates, select Project->Options->Autocode from the
+  JDE menu.
+
+* Added customization variable jde-bug-debugger-host-address.
+
+  The value of this variable defaults to the Emacs variable system-name.
+  JDEbug uses this variable to setup a socket connection with the debugger
+  for transporting the standard I/O of the debuggee process. You can set
+  this variable to an IP address if necessary. (This variable was added
+  at the request of a user whose network does not have a DNS for host name
+  resolution.)
+
+
+JDE-2.1.6beta24 Release Notes
+
+=====================================================================
+NOTE: This releases requires version 0.10 (or later) of Eric Ludlam's 
+speedbar and version 1.1beta (or later) of Eric's semantic bovinator.
+You can download both packages from
+
+http://choochoo.ultranet.com/~zappo/fsf.shtml
+=====================================================================
+
+* Adds a Classes index menu to the Emacs menubar.
+
+  The index lists all methods, fields, and inner classes for all
+  classes in the current Java source buffer. Click any entry to
+  scroll the buffer to the corresponding class member.
+
+  Set jde-enable-classes-menu-index off to disable the Classes menu.
+
+* Fixed lisp regression error in listen and attach commands for JDEbug.
+
+* The JDEbug process launch command now uses the value of system-name 
+  to specify the local host  when connecting to the debuggee process
+  SIO socket. This cures the launch failures some users are experiencing 
+  on NT and Linux.
+
+* Added a jde-complete-at-point-menu command that displays a popup menu of
+  completions for the method or field at point. The command is bound
+  to  the C-c C-v C-. keystroke combination. The old minibuffer functionality
+  continues to be available as jde-complete-at-point. It is bound to the
+  C-c C-v . combination.
+
+  Thanks to Howard Spector <howard@howardsp.com> for this very useful
+  enhancement.
+
+* JDE now displays or hide the JDEbug menu when you select or deselect JDEbug as 
+  the current debugger.
+
+* The JDE now uses a grammar-based (instead of regular-expression-based) parser
+  to generate the index used by the speedbar.
+
+JDE-2.1.6beta23 Release Notes
+
+* Define jde-mode abbreviations only when jde-enable-abbrev-mode is on.
+
+* Fixed listp bug in thread stack display.
+
+* Fixed display of NaN, Infinity, and -Infinity FP values on local variables buffer.
+
+* The currently selected Emacs frame now pops to the top when JDEBug hits a breakpoint.
+
+* Compile command now accepts Cygwin-style classpaths.
+
+* Local variables buffer now includes the "this" object for the corresponding stack frame.
+
+* Fixed Lisp eval error when a local string variable includes unbalanced parentheses.
+
+* Menus no longer freeze when you use JDEbug's Launch Process command.
+
+* Adds jde-imenu-recognize-tag-comments-p option. 
+  
+  When on, this option causes the imenu symbol declaration indexer to 
+  recognize variables and method declarations witn prefixed tag comments.
+
+
+JDE-2.1.6beta22 Release Notes
+
+* JDEbug now correctly represents byte values and int and long values greater
+  than 24 bits in length. Thanks to Charles Hart <cfhart@Z-TEL.com> for this fix.
+
+* History now works for interactively entered vm, jdb, and application arguments.
+  Thanks to Andy Wilson <drew@media.mit.edu> for reporting this bug.
+
+* Exception tracing now works correctly. Thanks to Matthew Conway <matt_conway@i2.com>
+  for reporting this bug.
+
+* Fixes Lisp error caused by unescaped quotes within strings.
+
+  Thanks to Mark Gibson, Doug Beal, and Martin Dickau for reporting this bug. Thanks to
+  David Hay, Mark Gibson, Steve Haflich, David Dagon, and Charles Hart for creating 
+  an efficient Java method for escaping strings.
+
+* Fixes several bugs with setting key bindings.
+
+* Added a JDEbug option to the jde-db-debugger customization variable.
+
+  This obsoletes the old method of selecting the debugger by
+  selecting the debugger class type and setting the Name option to jdebug.
+
+* You can now specify vm and app command-line arguments interactively when launching an 
+  application from JDEbug.
+
+  Thanks to Steve Haflich for providing this enhancement.
+
+* Display threads now includes the stack for each thread. 
+
+  Thanks to Paul Michael Reilly <pmr@pajato.com> for implementing this. Note that a 
+  future release will allow you to click on a frame and see the source and local
+  variables for the frame.
+
+* JDE now sets the working directory to jde-run-working-directory before starting JDEbug.
+
+  Note. The debugger launches all processes from this directory. You can not set the working
+  directory on a per-process basis.
+
+* The JDE documentation now includes the beginnings of a JDEbug User's Guide.
+
+JDE-2.1.6beta21 Release Notes
+
+* Added key bindings for JDEbug.
+
+  Note. You can customize the key bindings to suit your own preferences.
+  See JDEbug->Preferences.
+
+* Fixes an infinite recursion bug that can occur when stepping through code.
+
+* Fixes scrolling in process debug message window. 
+
+  Thanks to "Martin Dickau" <mdickau@byallaccounts.com> for this fix.
+
+* Fixed bug in process launch error message.
+
+* Fixed bug in JDE->Debug App where Debug App tries to set breakpoints
+  even though it has failed to launch the app.
+
+* Do not try to set persistent breakpoints in Java buffers not associated
+  with a file.
+
+* Moved "Browse JDK doc" menu item to Help menu.
+
+
+JDE-2.1.6beta20 Release Notes
+
+* Implemented color customization of the JDEbug breakpoint marker.
+
+  To customize the color, select JDEbug->Preferences or type
+  M-x customize-variable jde-bug-breakpoint-marker-colors. Enter
+  the desired foreground and background colors and set the variable.
+
+* Implemented persistent breakpoints.
+
+  To save a breakpoint, select JDEbug->Preferences or enter
+  M-x customize-variable jde-bug-saved-breakpoints. Select
+  the INS button in the variable's customization area to
+  add a breakpoint. Enter the name of the source file and
+  line number where you want the breakpoint to occur. Then
+  set the variable.
+
+  Note that setting breakpoints by file name can lead to
+  ambiguities when the same file name occurs in different
+  packages. A future release will allow you to specify a
+  qualified class name to resolve such ambiguities.
+
+* Fixed a number of Cygwin/XEmacs incompatibilities.
+
+  Thanks to Fred Hart <cfhart@Z-TEL.com> for providing the
+  fixes.
+
+* Fixed "search-end-post" error when setting jdb breakpoints.
+
+
+JDE-2.1.6beta19 Release Notes
+
+* When displaying local variables, the debugger was incorrectly 
+  quoting characters, causing Lisp errors. Thanks to 
+  Adam_Ambrose@geoworks.com for reporting this bug.
+
+* Implemented workaround for JPDA bug that was preventing breakpoints
+  from being set in inner classes. 
+
+  Note: I have tested this workaround only on JDK 1.3rc1.
+
+* Implemented stack up and down commands.
+
+  These commands work only for the thread on which a breakpoint or
+  step point has occurred. A future release will provide a
+  stack navigator that will allow you to navigate the stack of
+  any thread.
+
+
+JDE-2.1.6beta18 Release Notes
+
+
+* Fixed bug that caused completion on private methods and fields.
+
+  Thanks to Jean-Baptiste Nizet" <jean-baptiste.nizet@s1.com> for
+  reporting this and thd following bug.
+
+* Now completes on inherited as well as declared fields and methods.
+
+* Fixed "Wrong type argument: sequencep, 0" bug that occurs when 
+  using completion with XEmacs. Thanks to Dr. Volker Zell for 
+  reporting this bug.
+
+* Now supports completion of fields declared at the end of a class 
+  as well as those declared at the beginning of a class.
+
+* Replaced jde-help-class with jde-help-symbol method. The new method
+  gets help for the symbol at point. 
+
+  The symbol may refer to a class, an object, or a method or field. 
+  This method has some limitations. It works only for symbols declared
+  in the current buffer. For example, it works for
+
+     String msg = new String();
+     msg.length()
+
+  but not for
+
+    Status status = new Status();
+    status.msg.length()
+
+  Also, this method does not scroll the class file to the place where the
+  method or field is documented. These capabilities will come later.
+
+  Thanks to Geoff Borgggaard, borggaard@syncrasystems.com, for suggesting
+  this enhancement.
+
+* Fixed bug where Display->Threads command was not enabled when debugger
+  was attached to a process.
+
+Note: for instructions on installing and using JDEbug, read this
+entire file from back to front, starting at beta5.
+
+
+JDE-2.1.6beta17 Release Notes
+
+* Added Processes->Listen commands to the JDEBug menu.
+
+  These commands cause the debugger to listen on a socket or in shared
+  memory (the latter option available only on Windows) for applications
+  requesting debug services. To use these commands, you
+  must specify the following vm options when starting the debuggee
+  application:
+
+  -Xdebug
+  -Xnoagent
+
+  -Xrunjdwp:transport=TRANSPORT,address=ADDRESS,server=n,suspend=y
+
+   where TRANSPORT is either dt_shmem (shared memory connection) or
+   dt_socket (socket) connection and ADDRESS is an arbitrary string
+   for shared memory connections or a port number for socket 
+   connections. 
+
+   JDEBug prompts you to enter ADDRESS when you execute
+   the JDEbug->Processes->Listen command.
+
+   In addition, if you are using JDK1.3 to launch the debuggee client,
+   you must use the -Xbootclasspath to include the JPDA tools in the
+   debuggee vm's classpath.
+
+   -Xbootclasspath:e:/jdk1.3/jre/lib/rt.jar;e:/jdk1.3/lib/tools.jar
+
+   Here is an example of a typical command line to launch a debuggee
+   client, using JDK1.3:
+
+   java -classpath d:/myapp/myapp.jar -Xdebug -Xnoagent
+     -Xrunjdwp:transport=dt_shmem,address=myapp,server=y,suspend=n
+     -Xbootclasspath:e:/jdk1.3/jre/lib/rt.jar;e:/jdk1.3/lib/tools.jar
+     com.myorg.myapp.Main
+  
+  When you launch a Java application with these options, the vm
+  halts before running the app's main method and attempts to connect
+  with a debugger. Once the connection is made, the debugger is in
+  complete control of the app. For example, the app won't run until
+  the debugger issues a continue command. This means you can set
+  breakpoints in the debuggee apps startup code. 
+
+  This debugger server mode option is particularly useful if you
+  are developing a non-Java application that embeds a Java vm.
+  For example, you can put a command line switch on your app that
+  causes it to start its internal vm in debuggee client mode. The
+  internal vm will then immediately connect to the debugger allowing
+  you to debug the app's Java startup code.  
+
+* Moved Bootstrap.virtualMachineManager().getConnectors() off command thread
+  as this is suspected of causing launch problems on some Windows/NT systems.
+
+* Provide choice of coding styles for code generated by templates.
+
+  The styles are Modern (new line before opening brace) and
+  Kernighan & Ritchie (no new line).
+
+  Type C-h v jde-gen-k&r for more information.
+
+  Note that if you are using project files, you must set jde-gen-k&r on
+  or off, restart Emacs, and reset each of the template variables to
+  there default settings and then resave your project file.
+
+  Thanks to Jari Aalto for this enhancement.
+
+* Modified the Jdb->Set Breakpoint command to set breakpoints correctly in
+  inner classes.
+
+  This command generates the correct jdb command
+
+    stop at A.$B:L#
+
+  where A is the name of the outer class and B is the name of the inner class.
+
+  NOTE: this applies to JDE's support for jdb, the debugger that comes with the
+  JDK. It does not apply to JDEbug, the JDE's own built-in debugger.
+
+  Thanks to Francois Cogne <cogne@col.bsf.alcatel.fr> for providing this 
+  enhancement.
+
+* Fixed beanshell startup bug on Unix platforms.
+
+* You can now use the notation [f1], [f2], etc.,  to specify function keys
+  when customizing jde-key-bindings.
+
+* Fixed several incompatibilities between JDEbug and XEmacs.
+
+
+JDE-2.1.6beta16 Release Notes
+
+* Added a local variables buffer to JDEbug. 
+
+  This buffer displays the values of local variables whenever the program halts
+  at a breakpoint or is stepped. Trees are used to display objects and arrays.
+  Expanding an object shows its fields. If any of its fields are objects, you
+  can expand those too. Expanding an array shows the values of its elements.
+  If the elements are arrays (i.e., the array is multidimensional), you can
+  expand each of them until you get to the actual values. The local variables
+  buffer shows java.lang.String objects as strings rather than as objects.
+
+
+* Added a Show Buffers command to JDEbug.
+
+  This command shows the selected buffer, e.g., the local variables buffer
+  or the threads buffer,  in the middle window of the debugger frame.
+
+* Added a jde-show-class-source (C-c C-v C-y) command. This command finds
+  and displays the source for the (unqualified) class name at point. 
+  This command finds only classes whose source is in the paths specified by 
+  jde-db-source-directories. Thanks to Phil Lord for providing the 
+  initial implementation of this command.
+
+* Fixed numerous small problems found by Michael Ernst. Thanks Michael.
+
+
+
+JDE-2.1.6beta15 Release Notes
+
+* Added Attach Process on Local Host and Remote Host commands.
+
+* Added an Attach Process Via Shared Memory command for Windows apps.
+
+* Enhanced the JDE->Run App command to run the executable specified by jde-run-executable
+  with the arguments specified by jde-run-executable-args.
+
+  This is useful when you are developing an application consisting of an executable program
+  that launches a Java virtual machine.
+
+* Fixed jde-bug-debug-app command so that it gives a meaningful error message 
+  if JPDA is not properly installed.
+
+* Added JDEbug commands for setting and clearing watchpoints.
+
+* Fixed JDEbug stepping logic so that each source buffer is always loaded into 
+  the same window.
+
+* The JDE now suspends project context-switching while JDEbug is running a debugee
+  process. This avoids the debugger losing track of its current position in the source
+  code due to a change in the setting of jde-db-source-directories when switching
+  among projects that define this variable differently.
+
+* The submit bug report command now includes environment variables.
+
+* Added a Project menu to the JDE menu.
+
+* Moved the Options menu to the Project Menu.
+
+* Added a Project Files submenu to the new Project menu.
+
+* Moved the Save Project item to the Project Files menu.
+
+* Added Load and Load All commands to the Project Files menu. The first command 
+  loads the project file for the current Java source buffer. The Load All 
+  command loads the project file for each open source buffer.
+
+* Added a jde-project-context-switching-enabled-p customization variable. You can use
+  this variable to turn off automatic loading of project files. This allows you to 
+  manage project file loading manually.
+
+
+
+
+JDE-2.1.6beta14 Release Notes
+
+* JDE->Run Applet now looks in the current Java source directory for an html file having the
+  same root name as the current Java source buffer. If it finds such a file, it runs it. 
+  Otherwise, it runs the first html file that it encounters in the directory. Thanks to
+  Richard Y. Kim <ryk@coho.net> for providing a patch implementing this change.
+
+* Changed key binding for jde-help-class from C-c C-v C-h to C-c C-v C-w because C-h
+  is a reserve binding. Thanks to Richard Y. Kim <ryk@coho.net> for suggesing this change.
+
+  Don't forget to reset the value of jde-key-bindings to the standard setting if you
+  are using project files.
+  
+* Added command, JDEbug->Processes->Remove Dead Processes, that removes all objects 
+  associated with dead processes, including their buffers.
+
+* Fixed the debugger's launch process command so that it fails gracefully, 
+  without producing a Lisp backtrace.
+
+* Recompiled the debugger, using javac. Previous versions were compiled with jikes. The jikes 
+  version results in a mysterious null pointer exception when stepping through source code.
+
+* Added the variable jde-bug-jre-home. This variable specifies the home directory of the Java 
+  runtime environment containing the executable, e.g., java,  to be used to launch processes 
+  (see next note). If you do not specify a home directory, the home directory is the same as 
+  that of the executable used to run the debugger itself.
+
+* Added the variable jde-bug-vm-executable. This variable specifies the name of the executable to 
+  use to launch debuggee processes. This defaults to java on Unix platforms and javaw on Windows
+  platforms.
+
+
+JDE-2.1.6beta13 Release Notes
+
+* Include source for Completion class.
+
+* Fixed bug in trace methods command where the inclusion filter overwrote the exclusion filter.
+
+* Added jde-bug-vm-includes-jpda-p
+
+  Set this variable on if you are using JDK 1.3.
+
+* Added jde-bug-jdk-directory
+
+  Set this variable if you are using JDK 1.3.
+
+* Added JDEbug->Trace Exceptions command.
+
+* Added JDEbug->Display->Loaded Classes command.
+
+  This command lists the classes currently loaded by the target process.
+
+* Added JDEbug->Display->Path Info command.
+
+  This command displays the base directory, root classpath, and application classpath
+  of the target process.
+
+JDE-2.1.6beta12 Release Notes
+
+* Added trace classes commands: JDEbug->Trace Class Prep and
+  JDEBug->Trace Class Unload.
+
+  These commands cause the debugger to display a message each time a class
+  is prepared (loaded?) or unloaded. Options include whether to suspend execution
+  of the process and filters for restricting the trace to a specified set of
+  classes.
+
+* Added trace methods commands: JDEbug->Trace Method Entry and 
+  JDEBug->Trace Method Exit
+
+  These commands cause the debugger to display a message each time a method is
+  entered or exited. Options include restricting the trace request to a specified
+  thread, specifying whether to suspend the process when a method is entered or
+  exited, and restricting the trace request to methods of a specified class or
+  set of classes or a specified set of methods.
+
+* Added method completion command contributed by Rodrigo Reyes <reyes@chez.com>
+
+  This package adds smart completion to the JDE. Here is how it works:
+  put the cursor at the end of a statement "under
+  construction", eg. "myVariable.rem<CURSOR HERE> and call the
+  jde-complete-at-point emacs-lisp function (this is by default
+  C-c C-v C-.). A completion is then inserted. If multiple completions are
+  possible, calling the completion function again will cycle through
+  all the possibilities (as dabbrev-mode does).
+
+;; To retrieve all the possible completions, it uses the java code in
+;; jde.util.Completion.getClassInfo(), called by beanshell. That
+;; need the class to be compiled (but that's not worst than an etag
+;; call).
+
+
+* Added jde-submit-bug-report command contributed by Phillip Lord <plord@hgmp.mrc.ac.uk>
+
+* Added jde-browse-class command contributed by Rohit Namjoshi <Rohit_Namjoshi@trilogy.com>
+
+  This command displays the class at point in the BeanShell class browser. The class browser shows  the method signatures and fields of the specified class.
+
+* Fixed bug in JDEbug->Display->String where strings with backslashes caused a Lisp 
+  evaluation error.
+
+* Amended jde-db-make-qualified-class-name-regexp to permit package names to begin
+  with underscores. Contributed by  "Patrick J. McNerthney" <pat@mcnerthney.com>.
+
+JDE-2.1.6beta11 Release Notes
+
+* Adds Stop and Interrupt thread commands to JDEbug.
+
+* Fixed a line in jde-wiz.el, where an int is concat'd with some
+  strings.  This is not allowed by XEmacs 21.1. Fix provided by
+  "Mike Woolley" <mike@bulsara.com>.
+
+* Fixed bugs in JDEbug->Exit Debugger.
+
+* Adds Resume Process and Resume Thread commands.
+
+* Adds Suspend Process and Suspend Thread commands to JDEbug.
+
+* Adds JDEBug->Show Threads command.
+
+* Adds jde-help-class command to Help menu
+
+* Adds command to update JDE class list. Contributed by Phillip Lord.
+  
+  See jde-wiz-update-class-list for usage. Wizards->Update Class List
+  invokes this function.
+
+* JDE now caches list of jde- symbols. This speeds switching among
+  projects. Contributed by David Biesack.
+
+* Fixed "c-find-expr undefined" bug.
+
+
+JDE-2.1.6beta10 Release Notes
+
+This release is a first. It consists entirely of contributions
+of JDE users. Thanks to all who contributed.
+
+This release adds two EJB templates contributed by 
+Brendan Burns <Brendan.Burns@tfn.com>.
+
+It fixes the following bugs:
+
+* Beanshell does not work with JDK 1.1.x on Windows platforms.
+  Fix contributed by "Mike Woolley" <mike@bulsara.com>
+
+* -classic switch is not first on the command line of applications
+  launched by JDEBug. Fix contributed by David Ponce
+  <David_PONCE@mail.schneider.fr>.
+
+* "Symbol's value as variable is void: list" error when jde-db-option-classpath
+  or jde-run-option-classpath is defined. Fix contributed by
+  Danny Siu <dsiu@Adobe.COM>.
+
+
+
+JDE-2.1.6beta9 Release Notes
+
+Note. This release requires and includes the latest development 
+version of the eieio.el library. You should 
+remove any earlier versions from your Emacs load-path.
+
+This release comprises new JDEBug debugger features plus 
+bug fixes.
+
+New Debugger Features
+=====================
+
+(See release notes for beta 7 and 8 below for information on
+installing and running JDEBug.)
+
+This release implements the following new features and commands:
+
+* JDEBug->Display->Variable
+
+  This command displays the value of the variable at point.
+  If the value is a primitive, this command displays
+  the primitive's value. If the value is an object, the command
+  displays 
+
+    <TYPE:ID> 
+
+  where TYPE is the type of object and ID is an ID assigned
+  to the object by the debugger. Use the following commands
+  to display the fields of instances of user-defined types
+  and the elements of arrays.
+
+  This command works only if the variable is defined in the
+  target process. It displays the value in the debugger
+  output buffer for the target process.
+
+  Note: this command works by evaluating the expression at point.
+  If the expression is not a variable, the command will still
+  attempt to evaluate it.
+
+* JDEBug->Display->Array
+
+  Displays the elements of a specified array. The command prompts you
+  to enter the array's ID. 
+
+* JDEBug->Display->Object
+
+  Displays the fields of a specified object. The command prompts
+  you to enter the object's ID in the minibuffer.
+
+* JDEBug->Display->String
+
+  Displays the contents of a specified string, i.e., an object
+  of type java.lang.String. This command allows you to display 
+  the string's value without displaying its other fields.
+
+* JDEBug->Display->Local Variables
+
+  Displays the variables local to the point where the target
+  process is currently stopped. Note: on Windows 95, this
+  command sometimes crashes the application being debugged.
+  I can't detect any pattern. If you experience similar 
+  crashes, I'd appreciate hearing from you, especially if
+  you can detect any pattern to the crashes.
+
+* JDEBug->Evaluate Expression
+
+  This command evaluates any Java expression. The expression may
+  include variables. However, the variables must be defined
+  in the current stack frame of the target process.
+
+* JDEBug now remembers the initial 3-pane window configuration for a process
+  and restores the configuration when you invoke the JDEBug->Set Target
+  command.
+
+* Fixed the jde-find-data-directory to return the JDE directory on XEmacs if
+  it cannot find the JDE data in the XEmacs's data directory. This should allow
+  you to use JDE versions later than that packaged with XEmacs.
+
+
+Bug Fixes
+=========
+
+This release fixes the following bugs:
+
+* JDEBug->Set Breakpoint command should set the breakpoint at the
+  line containing point but instead sets the breakpoint at the
+  next line.
+
+* The Interface Wizard puts quotes around the code that it inserts
+  into a buffer.
+
+* Emacs queries the user whether to quit when the BeanShell is running.
+
+* The JDE->Wizards->Import Class command invokes the old, less
+  intelligent version of the import class command.
+
+* The jde-show-help command now works with Internet Explorer on Windows/NT.
+
+* Fixed bug in the JDEbug launch-process command where the command was failing
+  to convert the application arguments from a list of arguments to a
+  string of arguments. Thanks to "Matthew
+  Weymar"<mweymar@hamilton-partners.com> for reporting the bug.
+
+* The jde-help-class command now converts doc file paths to URLs. This should
+  ensure compatibility with browsers on various platforms. Thanks to
+  Satish Annapureddy <satish@mmsi.com> for reporting this problem.
+
+
+JDE2.1.6beta8 Release Notes
+
+This release continues implementation of the debugger.
+New features include:
+
+* Multiprocess debugging
+
+  You can now launch and have multiple processes running
+  concurrently in the same session. Processes are numbered
+  sequentially to permit identification even when multiple
+  instances of the same app are running. The Processes->Set Target
+  command allows you to designate any one of the processes
+  as the target process. Thenceforth all process-related 
+  commands affect that target, until you select another
+  target.
+
+* Window configuration management
+
+  When you launch a process, the JDE configures the frame
+  into three windows from top to bottom: source window,
+  app command-line interface window, and debugger message
+  window. The JDE remembers this configuration. Whenever
+  you select the process, the JDE restores the initial
+  configuration. Depending on your feedback, the JDE
+  may provide you with the option to save and restore
+  configurations of your choosing.
+
+There is a lot of work to be done. Some of the things
+I plan to work on for beta 9 include:
+
+* Updating the breakpoint highlights and breakpoint cursor
+  when you switch processes.
+
+* expression evaluator
+
+* local variable window
+
+My plan is to make releases at least once a week until the
+debugger implementation is complete.
+  
+
+JDE2.1.6beta7 Release Notes
+
+This release fixes two debugger bugs on Windows NT
+
+* Debugger apparently fails to respond to debugger commands. (Actually,
+  the problem is with standard I/O not flushing its buffer. The fix is
+  to but two linefeeds instead of one after each command.)
+
+* Continue command on the JDEBug Menu is greyed out when a process
+  is suspended. This happens because the debugger on NT returns
+  a process state of "unknown" instead of "waiting".
+
+Please note that I have updated the JDEBug screen shot on the JDE web site.
+It gives a good idea of what to expect when you run the debugger.
+
+
+JDE2.1.6b6 Release Notes
+
+This releases fixes the Interface Wizard, which was broken by a
+regression error in a previous release.
+
+It reimplements the JDEbug Lisp interface to use Eric Ludlam's
+Lisp object system and provides a customization variable for
+specifying the location of the JPDA package required to 
+run JDEbug.
+
+Finally, it reorganizes the JDE hierarchy, moving all Lisp files
+into a separate subdirectory, among other changes.
+
+REQUIREMENTS
+
+* eieio Lisp object system for Emacs. 
+  
+  You can download the package from
+
+    http://www.ultranet.com/~zappo/eieio.shtml
+
+   Please be sure to include the eieio package in your Emacs
+   load-path.
+
+*  The JDE lisp files now reside in the lisp subdirectory of
+   the JDE distribution. So you must update the load-path in your
+    .emacs file, accordingly, e.g.,
+
+   (setq load-path
+      (nconc
+        '("~/emacs/site/jde-2.1.6b6/lisp)
+         load-path))
+
+* Java Platform Debug Architecture distribution from Sun 
+  MicroSystems to run JDEbug, the JDE's new debugger. You can 
+  download the package from JavaSoft's website.
+
+  Important: you must include the JPDA's bin directory in your
+  path.
+
+
+
+JDE2.1.6beta5 Release Notes
+
+This beta contains an early release of JDEBug, the new
+debugger being developed for the JDE by Paul Kinnucan and
+Amit Kumar, with the support of Sun Microsystems. The new
+debugger is based on Sun's Java Platform Debug Architecture 
+and is designed specifically to work with Emacs, which
+serves as its user interface. The new release requires
+a JDK 1.2-compatible vm.
+
+To debug a project with JDEbug, you must first select
+it as the debugger for the project. You do this by customizing the
+variable jde-db-debugger. To customize this variable,
+select Project->Options->General from the JDE menu to display 
+the project customization buffer. Then edit the jde-db-debugger
+entry in the buffer to read as follows:
+
+Jde Db Debugger: [Hide]
+Name: jdebug
+Debugger type is  
+( ) Executable
+(*) Class
+   [State]: you have set this option, but not saved it for future sessions.
+Specify debugger. [More]
+
+Finally, save the setting. If you want to use the debugger 
+only on the current project, select "Set for current session"
+from the customization buffer's State menu and then select
+Options->Save Project from the JDE menu to save the setting
+in the project's project file. Otherwise, select
+the "Save for future sessions" options to save the setting
+in your .emacs file.
+
+After you have saved the setting, open a Java source file
+from the current project (or any source file if you save the
+jde-db-debugger setting in your .emacs file). You should now
+see the JDEbug menu in the Emacs menu bar. Note that most of
+the menu items are grayed. Some items are grayed because they
+are not yet implemented; others, because they require an 
+application to be running.
+
+Before proceeding further, first check that you have set
+jde-db-source-directories to specify the directories containing
+source files for the application you want to debug.
+
+Now, to debug an application, first set a breakpoint somewhere
+in your application. To set the breakpoint, open the source
+file for the breakpoint selection, click the line at which
+you want the debugger to halt execution of the application, and
+the select Set Breakpoint from the JDEbug menu. The JDE highlights
+the selected line in yellow (you can customize the highlight color).
+
+Once you have set the breakpoint, close all Emacs windows except
+the one containing the source file with the breakpoints. Then, select 
+Debug App from the JDE menu. After a short pause, the Emacs frame
+divides into three windows. The top window contains your source file.
+You should see a debug arrow pointing at the breakpoint line,
+indicating that the debugger has halted your application at the breakpoint.
+The middle window contains a window for interacting with your 
+application. Application standard output appears in this window.
+You can enter application input in this window also (not tested). The bottom
+window shows debug output from the JDE and the debugger. You can
+now use the debugger's step and continue commands to step through
+your program. To abort the application and exit the debugger, select
+Exit from the JDEbug menu.
+
+As you will quickly discover, the current release is limited to setting
+breakpoints and stepping through an application. Subsequent releases
+will add support for displaying variables, setting watchpoints, 
+controlling threads, debugging multiple processes, browsing objects,
+etc. Much of this functionality is already implemented in the debugger
+and only needs to be exposed via the JDE interface. So new features
+should come pretty quickly.
+
+Your feedback regarding bugs and usability is welcome. We are particularly
+interested in input on user interface issues, especially related to
+the problem of managing multiple processes and debugger output window
+configuration.
+
+JDE2.1.6beta4 Release Notes
+
+This release generalizes the jde-help-class command to work with
+class API doc of any type, including the Java 1 and Java2 versions
+of javadoc. To do this, it replaces the variable jde-help-javadoc-dirs
+with the variable jde-help-docsets. The new variable allows you to
+specify the format of the documentation (javadoc or "other") and
+a search function for searching docsets that are not javadoc.
+
+This release also fixes a long-standing bug with the Save Project
+command. The command now kills the buffer containing the project
+file after saving its contents. This should reduce the chance of
+two project file buffers being open simultaneously, which can
+lead to corruption of the files. Note that it is perfectly okay
+to have multiple projects open.
+
+JDE 2.1.6beta3 Release Notes
+
+This releases adds context-sensitive help for class names. To
+use this facility, first customize the variable jde-help-javadoc-dirs
+to specify a list of the directories containing javadoc class
+documentation on your system. Once you have done this, typing
+C-c C-v C-h causes the JDE to display the javadoc for the class
+at point in the current buffer. The command uses the browser that you 
+have specifed with Emacs browse-url package to display the
+class documentation. The default browse-url browser is Netscape.
+See the browse-url documentation for information on specifying
+another browser, such as w3. Thanks to Phillip Lord <plord@hgmp.mrc.ac.uk>
+for reviewing and enhancing the code for this command.
+
+
+This release includes enhancements to the jde-wiz-find-and-import
+command, which imports the class whose name appears at point in the
+current buffer. The command now has a customization variable
+jde-wiz-insert-excluded-packages-regexp that allows you to prevent
+specified classes from being considered for import into a buffer.
+This variable is useful if the same class name is declared in
+multiple packages and you only want some of the classes to be
+considered for import. If the jde-wiz-find-and-import command finds
+multiple import candidates in your classpath, it now prompts you
+to choose a class instead of silently importing all the candidates.
+Thanks to Phillip Lord <plord@hgmp.mrc.ac.uk> for providing these
+enhancements.
+
+This release also fixes a bug in the Java code used by the
+jde-find-and-import command. As a result, you no longer need
+to include the core JDK 1.2 classes, i.e., rt.jar, in your classpath.
+Thanks to David_PONCE@mail.schneider.fr for providing this fix.
+
+
+JDE 2.1.6beta2 Release Notes
+
+This release fixes the following bugs:
+
+* JDE does not require jde-parse.el.
+
+* ImportWizard incorrectly replaces path separators with periods.
+
+
+JDE 2.1.6beta1 Release Notes
+
+This releases incorporates the following changes:
+
+New Features
+============
+
+* Java parser
+
+  The JDE now comes with its own Java parser implemented in Java. You can invoke
+  the parser from the BeanShell or via the jde-parse command (see next). The 
+  parser was generated by JavaCC and the Java Tree Builder. The source for 
+  the parser and the grammar from which it was generated are in the JDE's
+  java directory.
+
+* jde-parse command
+
+  Checks the current buffer for syntax errors, using the JDE's Java parser.
+
+* jde-wiz-find-and-import command
+
+  Generates an import statement for a class in the current buffer. Unlike 
+  jde-wiz-import, which requires a fully qualified class name, this new 
+  command does not require the class name to be qualified. Indeed, it 
+  should not be qualified. The command searches the classpath for the
+  name you enter (by default the name at point) and imports any classes
+  by that name that it finds. (A future version will let you choose which
+  class to import.) This command uses the BeanShell and a new JDE Java class,
+  jde.wizards.ImportWizard. Thanks to Len Trigg <trigg@cs.waikato.ac.nz>
+  for implementing this class.
+
+* C-c C-v C-z is now bound to jde-wiz-find-and-import instead of jde-wiz-import
+
+  If you prefer the old command, you can customize the keybinding in your .emacs
+  or prj.el files.
+
+* The make version of jde-build now allows interactive entry of make arguments. 
+  Thanks to Yarek J. Kowalik <jgk@klg.com> for providing this enhancement.
+
+
+Bug Fixes
+=========
+
+* Changed jde-run-parse-args to accept any substring enclosed in single or double
+  quotes or that does not contain white space as an arg. Thanks
+  to Changzhou Wang <cwang@osf1.gmu.edu>.
+
+* Added missing java-font-lock-keywords-3 for XEmacs. Thanks to
+  Stephane <informagician@lunatech.com> for spotting this bug.
+
+
+
+
+
+
+
+

doc/html/jdb-ug/jdb-guide.html

+<html>
+
+<head>
+<meta http-equiv="Content-Type"
+content="text/html; charset=iso-8859-1">
+<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
+<title>Debugging with jdb</title>
+
+<style TYPE="text/css">
+   h1 { font-family: sans-serif; font-size: x-large;}
+   h2 { font-family: sans-serif; font-size: large;
+        margin-top: .5in;
+        margin-left: .2in;
+	border-top-color: gray;
+	border-top-style: solid;
+        border-top-width: thin}
+   h3 { font-family: sans-serif; font-size: medium;
+        margin-left: .2in;
+	margin-top: .4in}
+   h4 { font-family: sans-serif;
+        margin-left: .2in;
+        margin-top: .3in }
+   p  { margin-left: .2in}
+   ul { margin-left: .4in}
+   ol { margin-left: .45in}
+   li { margin-bottom: 2%}
+   table { margin-left: .2in}
+</style>
+
+</head>
+
+<body bgcolor="#FFFFFF">
+
+<h1><a name="DebuggingWithJdb"</a>Debugging with jdb</h1>
+
+<h2>Before You Begin</h2>
+
+<p>You should perform the following steps before attempting to use <code>jdb</code>.</p>
+
+<ol>
+    <li>Set the configuration variable <code>jde-db-debugger</code> 
+        to <code>jdb</code> if you are using version 1.3 (or later)
+        of the Windows or Solaris versions of the JDK or 
+        version 1.2.2 (or later) of the Linux version
+        of the JDK. Set <code>jde-db-debugger</code> to
+        <code>oldjdb</code> if you are using older versions of the
+        JDK.</li>
+    <li>Use <tt>jde-db-set-source-paths</tt> to specify the paths
+        of any source code that you expect to visit while
+        debugging your application (see <a
+        href="#SpecifyingSourceCodePaths">Specifying Source Code
+        Paths</a>). If you suspect that a problem is occurring in
+        the Java API, you should include the API source files in
+        your source path.</li>
+    <li>Compile your source files with the <tt>-g</tt> option
+        (see <a href="#CompilingJavaPrograms">Compiling Java
+        Programs</a>). This causes the compiler to insert
+        information needed by the debugger into your
+        application's class files.</li>
+    <li>Specify the app's main class either by running the <tt>jde-run-set-app</tt>
+        command (you need only do this once) or by starting the
+        debugger from the buffer that contains the source file
+        for the main class.</li>
+</ol>
+
+<h2>Starting the Debugger</h2>
+
+<p>To start the debugger, run the <tt>jde-db</tt> command (<font
+size="2"><b>JDE-&gt;Debug</b></font>, <tt>C-c C-v C-d</tt>). The
+JDE splits the Emacs window into two frames. One shows the
+debugger interaction buffer. The other frame displays your
+application's main method. An arrow (=&gt;) points to the main
+method's first line. The menu bar of the source buffer displays a
+menu (<font size="2"><b>Jdb</b></font>) of debug commands. </p>
+
+<p>&nbsp;<img src="images/debug1.gif" width="601" height="457"> </p>
+
+<h3>Setting Debugger Options Interactively</h3>
+
+<p>If you set the customization variable <tt>jde-db-read-vm-args</tt>
+to a non-<tt>nil</tt> value, the JDE compile command prompts you
+to enter debugger options in the minibuffer. It appends the
+options that you enter to the options specified via customization
+variables. The JDE saves the arguments that you enter in a
+minibuffer history list. You can recall previously entered
+options by pressing the up or down arrows on your keyboard. </p>
+
+<h3>Setting Command-Line Application Arguments Interactively</h3>
+
+<p>If you set the customization variable <tt>jde-db-read-app-args</tt>
+to a non-<tt>nil</tt> value, the JDE compile command prompts you
+to enter command-line application arguments in the minibuffer. It
+appends the options that you enter to the arguments specified via
+the customization variable <tt>jde-db-option-application-args</tt>.
+The JDE saves the arguments that you enter in a minibuffer
+history list. You can recall previously entered options by
+pressing the up or down arrows on your keyboard. </p>
+
+<h3>Entering Debugger Commands</h3>
+
+<p>The JDE lets you enter commands from either the current source
+buffer or from the debugger command-line interaction buffer. You
+can enter all debugger commands from the debugger buffer. You can
+enter only a subset of debugger commands from the current source
+buffer. </p>
+
+<h3>Entering Commands from the Current Source Buffer</h3>
+
+<p>The current source buffer is the buffer in which your program
+is currently halted (initially the buffer containing the source
+for your program's main class).To enter a debugger command from
+the current source buffer, select the command from the jdb menu
+or type the shortcut key for the command. The <font size="2"><b>jdb</b></font>
+menu lists the shortcut keys for debugger commands. </p>
+
+<h3>Entering Commands in the Debugger Interaction Window</h3>
+
+<p>To enter a command in the debugger interaction window, type
+the command at the debugger prompt and press the <tt>Enter</tt>
+key. To see a list of debugger commands, enter the command <tt>help</tt>.
+</p>
+
+<h2>Running an Application Step-by-Step</h2>
+
+<p>Set a breakpoint at the line where you want to begin stepping
+through your program (see <a href="#SettingBreakpoints">Setting
+Breakpoints</a>). Then,&nbsp; type the <tt>run</tt> command. The
+debugger runs your program, stopping at the breakpoint. At this
+point, you can step through your code by entering commands in
+either the Java source buffer or the jdb interaction buffer. </p>
+
+<ul>
+    <li>In the source buffer, choose <font size="2"><b>Jdb-&gt;Step</b></font>
+        (<tt>C-x C-a C-s</tt>) or <font size="2"><b>Jdb-&gt;Next</b></font>
+        (<tt>C-x C-a C-n</tt>) to step into or step over the
+        current line, respectively. Select <font size="2"><b>Jdb-&gt;Continue</b></font>
+        (<tt>C-x C-a C-r</tt>) to continue to the next breakpoint
+        or to the end of your program, whichever comes first.</li>
+    <li>In the jdb buffer, enter <tt>step</tt>, <tt>next</tt>, or
+        <tt>cont</tt> at the <tt>jdb</tt> command prompt.</li>
+</ul>
+
+<p>The debugger executes the current line and stops at the next
+line. If the next line is in another source file, the debugger
+opens the source file in the source buffer (replacing the
+existing file) and positions the display at the new stopping
+point. At this point, you can enter a debugger command to display
+the value of a variable, set or clear a breakpoint, or perform
+some other operation. </p>
+
+<p><b>Note</b>. A blank source buffer indicates that the debugger
+cannot find the source file into which you have stepped. You
+should check your source path setting (see <a
+href="#SpecifyingSourceCodePaths">Specifying Source Code Paths</a>)
+to ensure that it includes all source files in the execution path
+of your program. </p>
+
+<h2><a name="SettingBreakpoints"></a>Setting Breakpoints</h2>
+
+<p>You can set breakpoints in the debugger&nbsp; buffer or the
+current source buffer. When setting breakpoints from the current
+source buffer, you can set breakpoints only in the class
+displayed in the buffer. If you want to set breakpoints at other
+points in your program, you must set them from the debugger
+interaction buffer. </p>
+
+<h3>Setting Breakpoints from the Debugger Buffer</h3>
+
+<p>The <tt>stop in</tt> command sets a breakpoint in a specified
+function. For example, </p>
+
+<pre>
+     > stop in myapp.Main.main
+</pre>
+
+<p>sets a breakpoint in the main method of <tt>myapp.Main</tt>
+class. The stop at command sets a breakpoint at a particular
+line. For example, </p>
+
+<blockquote>
+    <p><tt>&gt; stop at myapp.Main:20</tt></p>
+</blockquote>
+
+<p>sets a breakpoint at line 20 of <tt>myapp.Main</tt> class. Use
+the <tt>clear</tt> command to clear a breakpoint from a specified
+line. For example, </p>
+
+<blockquote>
+    <p><tt>&gt; clear myapp.Main:20</tt></p>
+</blockquote>
+
+<p>clears the breakpoint set at line 20 of <tt>myapp.Main</tt>. </p>
+
+<h3>Setting Breakpoints in the Source Buffer</h3>
+
+<p>To set a breakpoint on any executable line in the source file
+buffer, click on the line and select <font size="2"><b>Jdb-&gt;Set
+Breakpoint</b></font> (<tt>C-x SPC</tt>). To clear a breakpoint
+from a line in the current buffer, click on the line and select <font
+size="2"><b>Jdb-&gt;Remove Breakpoint</b></font> (<tt>C-x C-a C-d</tt>).
+</p>
+
+<a name="SpecifyingSourceCodePaths">
+<h3>Specifying Source Code Paths</h3>
+</a>
+
+<p>The <tt>jde-db-source-directories</tt> variable specifies the
+directories the JDE should search for source for classes visited
+by the debugger as you step through your program. You can set the
+value of this variable in a customization buffer or in the
+minibuffer. </p>
+
+<h3>Using Customization to Set Source Paths</h3>
+
+<p>To use customization, select <font size="2"><b>JDE-&gt;Options-&gt;Project</b></font>
+and edit the <tt>jde-db-source-directories</tt> entry in the
+resulting customization buffer. To show the current value of the
+variable, select the <font size="2"><b>Show/Hide</b></font>
+button. To add a directory, click the last <font size="2"><b>INS</b></font>
+button in the list&nbsp; and enter the directory in the resulting
+edit field. When you are done adding entries, press the <font
+size="2"><b>State</b></font> button to set the variable. To save
+the setting in your project file, select <font size="2"><b>JDE-&gt;Options-&gt;Save
+Project</b></font>. The following figure shows an example of the <tt>jde-db-source-directories</tt>
+entry in a customization buffer. </p>
+
+<p><img src="images/debug2.gif" width="657" height="393"> <br>
+&nbsp; </p>
+
+<p>You must specify the paths of the top-level directories of any
+source code that you might visit while debugging your
+application. The source code directory structure must mirror your
+app's package structure. For example, suppose that your
+application includes a set of classes packaged in the <tt>myapp</tt>
+directory. Then, the source for those classes must be reside in a
+directory named <tt>myapp</tt> and you must specify the path of <tt>myapp</tt>'s
+parent directory. </p>
+
+<p><b>Tip:</b> If you want to step through the JDK source code,
+select the source code install option when you install the JDK
+and set the <tt>jde-db-source-directoiries</tt> variable
+to&nbsp; the top-level directory containing the source code. The
+JDE will use the JDK's package structure to find the source code
+in the subdirectories. </p>
+
+<p><b>Tip:</b> Save the setting of <tt>jde-db-source-directories</tt>
+in your <tt>prj.el</tt> file (see <a href="#SavingProjSettings">Saving
+Project Settings</a>) to avoid having to set them every time you
+start a session. </p>
+
+<h2>Displaying Variables</h2>
+
+<p>The debugger lets you display the value of any local variable
+currently in scope. To display a variable from the debugger
+buffer, enter <tt>print x</tt> at the debugger prompt where <tt>x</tt>
+is the name of the variable whose value you want to display. The
+debugger displays the value of the variable in the debugger
+buffer. To display a local, in-scope variable whose source is
+displayed in the debugger source buffer, put the point on the
+variable and select <font size="2"><b>Jdb-&gt;Print Expression</b></font>
+or type <tt>C-x C-a C-p</tt>. To display all variables in scope,
+enter <tt>locals</tt> at the debugger command prompt in the
+debugger buffer. </p>
+
+<p>When the debugger displays a user-defined object, it prints
+the value returned by the object's <tt>toString()</tt> method. By
+default, the <tt>toString()</tt> method returns the object's id.
+You can override the <tt>toString()</tt{> </tt></p>
+
+<h2>Debug Options</h2>
+
+<p>The JDE allows you to specify debug options by setting JDE
+configuration variables.You can use the Emacs customization
+feature to set debug variables interactively. To use the
+customization feature, select <b><tt>Options-&gt;Debug</tt></b>
+from the <b><tt>JDE</tt></b> menu. (See <a
+href="#ConfiguringJDE">Configuring the JDE</a> for
+more information on using the customization feature). In some
+cases, the JDE also provides functions for setting the
+buffer-local values of the compilation variables. To save the
+compilation settings in the project file (see <a
+href="#UsingProjectFiles">Using Project Files</a>)
+for the current source buffer, select <b><tt>Options-&gt;Update
+Project</tt></b> from the <b><tt>JDE</tt></b> menu.</p>
+
+<p>The following table lists the JDE run-time variables and
+the functions used to set them.</p>
+
+<table border="2" cellpadding="5" width="100%">
+    <tr>
+        <th><b><tt>Variable</tt></b><tt> </tt></th>
+        <th><b><tt>Group</tt></b><tt> </tt></th>
+        <th><b><tt>Usage</tt></b><tt> </tt></th>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-debugger</tt></td>
+        <td valign="top">Project&nbsp;</td>
+        <td valign="top">Specify debugger. The command <tt>jde-db-set-debugger</tt>
+        sets the buffer-local value of this variable.&nbsp;</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-source-directories</tt></td>
+        <td valign="top">Project&nbsp;</td>
+        <td valign="top">Specify location(s) of source files that
+        can be visited while stepping through a program. The
+        command <tt>jde-db-set-source-paths</tt> sets the
+        buffer-local value of this variable.&nbsp;</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-set-initial-breakpoint</tt></td>
+        <td valign="top">Project</td>
+        <td>If non-<tt>nil</tt>, causes the JDE to set an initial
+        breakpoint at the beginning of the application's main
+        method and run the application at debugger startup. This
+        variable is <tt>t</tt> by default. If you want to specify
+        an initial breakpoint, set this variable to <tt>nil</tt>.</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-mode-hook</tt></td>
+        <td valign="top">Project&nbsp;</td>
+        <td valign="top">Customization hook for jde-db inferior
+        mode.&nbsp;</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-startup-commands</tt></td>
+        <td valign="top">Project</td>
+        <td>List of commands to run at debugger startup. This
+        variable overrides <font size="2">jde-db-set-initial-breakpoint</font>.</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-marker-regexp</tt></td>
+        <td valign="top">Project</td>
+        <td>Regular expression used to recognize breakpoint
+        markers in the debugger output. This expression should
+        have two subexpressions: the first matches the name of
+        the class in which the program stopped; the second, the
+        number of the line at which the program stopped. By
+        default, this variable is set to an expression that
+        matches breakpoint markers in jdb's output.</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-global-classpath</tt></td>
+        <td valign="top">Project&nbsp;</td>
+        <td valign="top">Specify class paths for compile, run,
+        and debug commands. The command<tt>
+        jde-set-global-classpath</tt> sets the buffer-local value
+        of this variable.&nbsp;</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-read-vm-args</tt></td>
+        <td valign="top">Project</td>
+        <td>Specifies whether to read debugger VM arguments from
+        the minibuffer.</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-read-vm-args</tt></td>
+        <td valign="top">Project</td>
+        <td>Specifies whether to read command-line application
+        arguments from the minibuffer.</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-option-classpath</tt></td>
+        <td valign="top">Debug&nbsp;</td>
+        <td valign="top">Specifies the classpath for&nbsp; the
+        Java interpreter. This option overrides the
+        jde-global-classpath option.&nbsp;</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-option-verbose</tt></td>
+        <td valign="top">Debug&nbsp;</td>
+        <td valign="top">Print messages about the running
+        process.&nbsp;</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-option-properties</tt></td>
+        <td valign="top">Debug&nbsp;</td>
+        <td valign="top">Specify property values.</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-option-heap-size</tt></td>
+        <td valign="top">Debug&nbsp;</td>
+        <td valign="top">Specify the initial and maximum size of
+        the interpreter heap.&nbsp;</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-option-stack-size</tt></td>
+        <td valign="top">Debug&nbsp;</td>
+        <td valign="top">Specify size of the C and Java stacks.</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-option-garbage-</tt>&nbsp; <br>
+        <tt>collection</tt>&nbsp;</td>
+        <td valign="top">Debug</td>
+        <td valign="top">Specify garbage collection
+        options.&nbsp;</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-option-java-profile</tt></td>
+        <td valign="top">Debug&nbsp;</td>
+        <td valign="top">Enable Java profiling.</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-option-heap-profile</tt></td>
+        <td valign="top">Debug&nbsp;</td>
+        <td valign="top">Output heap profiling data.</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-option-verify</tt></td>
+        <td valign="top">Debug&nbsp;</td>
+        <td valign="top">Verify classes.</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-option-vm-args</tt></td>
+        <td valign="top">Debug&nbsp;</td>
+        <td valign="top">Specify command-line arguments to be
+        passed to the Java VM. The command <tt>jde-db-set-args</tt>
+        sets the buffer-local value of this variable.&nbsp;</td>
+    </tr>
+    <tr>
+        <td valign="top"><tt>jde-db-option-application-args</tt></td>
+        <td valign="top">Debug&nbsp;</td>
+        <td valign="top">Specify command-line arguments to pass
+        to the application. The command <tt>jde-db-set-app-args </tt>sets
+        the buffer-local value of this variable.&nbsp;</td>
+    </tr>
+</table>
+
+</body>
+
+</html>
Add a comment to this file

doc/html/jde-ug/images/JdeMenu.gif

Added
New image
Add a comment to this file

doc/html/jde-ug/images/KeyBindings.gif

Added
New image
Add a comment to this file

doc/html/jde-ug/images/Keybindings.gif

Added
New image
Add a comment to this file

doc/src/jde-ug/images/KeyBindings.gif

Added
New image

java/bsh-commands/bsh/commands/browseClassName.bsh

+
+/*
+	Browse the specified class or the class of the specified object.
+*/
+browseClassName(String classname) {
+
+	if ( bsh.classbrowser == void ) {
+		classBrowser();
+	}
+
+	bsh.classbrowser.toFront();
+	bsh.classbrowser.driveToClass( classname );
+}

java/src/jde/debugger/Application.java

+package jde.debugger;
+
+import com.sun.jdi.ReferenceType;
+import com.sun.jdi.VirtualMachine;
+import com.sun.jdi.event.EventQueue;
+import com.sun.jdi.request.ClassPrepareRequest;
+import com.sun.jdi.request.EventRequest;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import jde.debugger.ObjectStore;
+import jde.debugger.spec.BreakpointSpec;
+import jde.debugger.spec.EventRequestSpec;
+import jde.debugger.spec.EventRequestSpecList;
+import jde.debugger.spec.ExceptionSpec;
+import jde.debugger.spec.WatchpointSpec;
+import java.io.BufferedWriter;
+import java.io.OutputStreamWriter;
+
+
+/**
+ * Class of debuggee applications.
+ *
+ * @author Amit Kumar
+ * @since 0.1
+ * @author Paul Kinnucan
+ * @since 1.5
+ */
+public class Application implements Protocol {
+
+     
+  /********************************************************************
+   * CONSTRUCTORS                                                     *
+   ********************************************************************/
+
+  /**
+   * Creates an instance of an application object.
+   *
+   * @param jdebug {@link Jdebug} class
+   * @param appID Identifier used to specify this app int commands.
+   * @param vm Virtual machine in which this application is running.
+   */
+  public Application(Jdebug jdebug, Integer appID, VirtualMachine vm) {
+    
+    this.jdebug = jdebug;
+    
+    this.appID = appID;
+
+    this.vm = vm;
+
+    pendingCommands = Collections.synchronizedSet(new HashSet());
+
+    store = new ObjectStore(this);
+
+    eventHandler = new EventHandler(this);
+
+    eventRequestSpecs = new EventRequestSpecList(this);
+
+    // we need to raise all class prepare events to 
+    // make sure we resolve the corresponding specs.
+    ClassPrepareRequest cprequest =
+      vm.eventRequestManager().createClassPrepareRequest();
+
+    // this (hack?) is used to identify if the user itself specified
+    // a class prepare request, or the event was raised because of
+    // this request.
+    cprequest.putProperty("default", "default");
+    cprequest.setSuspendPolicy(EventRequest.SUSPEND_ALL);
+    cprequest.enable();
+
+    // set up command handling classes.
+    generalCommands =
+      new GeneralCommands(this, store);
+    specCommands =
+      new SpecCommands(this,eventRequestSpecs,store);
+    threadCommands =
+      new ThreadCommands(this, store);
+
+  }
+
+  /********************************************************************
+   * METHODS                                                          *
+   ********************************************************************/
+
+  /*
+   * Gets the virtual machine that is running this application.
+   * @return Application running this vm.
+   */
+  public final VirtualMachine getVM() { return vm; }
+
+  /*
+   * Gets the ID used by commands to specify this application.
+   *
+   * @return application ID
+   */
+  public final Integer getId() { return appID; }
+
+  /*
+   * Generates an ID used by commands to reference objects.
+   * 
+   * @return new object ID
+   */
+  public final Long generateObjectID() {
+    // synchronize on any static object
+    synchronized (Jdebug.debuggerID) {
+      return new Long(objIdCounter++);
+    }
+  }
+
+  public final ObjectStore getStore() { return store; }
+
+  public final EventQueue getEventQueue() { return vm.eventQueue(); }
+
+
+  public final void shutdown() {
+    // we need to be a little considerate to the output. given
+    // there are all kinds of threads running, we make sure we
+    // wait for all the output to complete.
+
+    shuttingDown = true;
+	
+    // isolate the process first
+    Process process = null;
+    if (vm != null) 
+      process = vm.process();
+    try {
+      if (vm != null) {
+	vm.dispose();
+	vm = null;
+	eventHandler.shutdown();
+      }
+      sioSocket.close();
+    } catch (Exception ex) {
+      // do nothing
+    } finally {
+      if (process != null) {
+	process.destroy();
+	// XXX sun's jdb implementation works a lot to make sure
+	// the stderr and stdout are dumped before killing
+	// things. i'm not sure how important it is, or even how
+	// well it works (given i can't test it)
+	// sooo, if the reader finds bugs with the output handling
+	// on finish, lemme know.
+      }
+      jdebug.removeApplication(appID);
+    }
+  }
+
+    
+    
+  /*
+   * FUNCTIONS TO MANAGE Standard IO STREAMS
+   */   
+
+ 
+  /**
+   * Launches a thread to connect the Emacs standard I/O buffer
+   * for the current process to the standard I/O of the process.
+   *
+   * <p>
+   * This method creates a socket for the standard I/O connection.
+   * The thread waits for Emacs to connect to the standard I/O socket.
+   *
+   * @return Address of standard I/O socket.
+   * @exception JDEException if an error occurs
+   */
+  public int initSIOConnect() throws JDEException {
+
+    signal(MESSAGE, "initSIOConnect: starting standard I/O handshake.");
+
+    ServerSocket ss = null;
+    try {
+      ss = new ServerSocket(0);
+    } catch (IOException ex) {
+      throw new JDEException("Unable to create a server socket");
+    }
+
+    final ServerSocket sstmp = ss;
+    final int port = ss.getLocalPort();
+
+    standardIOConnectThread = new Thread("Standard I/O Thread for App #"+appID) {
+	public void run() {
+	  try {
+	    signal(MESSAGE, "Debugger waiting for Emacs to connect to app SIO port " +
+		   port + ".");
+	    sioSocket = sstmp.accept();
+	    sstmp.close();
+	  } catch (IOException ex) {
+	    signal(ERROR, "IOException occurred while connecting to app SIO port " + port +
+		   ". Shutting down...");
+	    shutdown();
+	  } catch (SecurityException ex1) {
+	    signal(ERROR, "Security exception occurred while connecting to app SIO port " +
+		   port);
+	  }
+	}
+      };
+
+    signal(MESSAGE, "initSIOConnect: starting SIO connect thread.");
+    standardIOConnectThread.start();
+    return port;
+
+  }
+
+  /**
+   * Describe <code>initSIOTransport</code> method here.
+   *
+   */
+  public void initSIOTransport() {
+
+    try {
+      standardIOConnectThread.join();
+      signal(MESSAGE, "Debugger connected to standard I/O socket.");
+
+      
+
+      final Process process = vm.process();
+      standardInputProcessor = new StandardInputProcessor(process.getOutputStream());
+      standardInputProcessor.start();
+
+      standardOutputWriter = new StandardOutputWriter(sioSocket);
+
+      standardOutputProcessor = new StandardOutputProcessor(process.getInputStream());
+      standardOutputProcessor.start();
+
+      standardErrorProcessor = new StandardErrorProcessor(process.getErrorStream());
+      standardErrorProcessor.start();
+
+    }
+    catch (InterruptedException ex1) {
+      signal(ERROR, "Debugger interrupted while waiting for Emacs to connect to " +
+	     "standard I/O socket.");
+    }
+
+  }
+
+  /**
+   * Reads standard input from Emacs and forwards it to the application.
+   *
+   * @author Paul Kinnucan <paulk@mathworks.com>
+   * @version 1.0
+   * @since 1.0
+   * @see Thread
+   */
+  private class StandardInputProcessor extends Thread {
+
+    public StandardInputProcessor(final OutputStream toVmStream) {
+      super("Input Processor for App #"+appID);
+      
+      toVM = new PrintStream(toVmStream, true);
+
+      try {
+	fromEmacs =
+	  new BufferedReader(new InputStreamReader(sioSocket.getInputStream()));
+      }
+      catch (IOException ex1) {
+	signal(ERROR, "Could not get standard input stream from Emacs.");
+      }
+	
+      setPriority(Thread.MAX_PRIORITY-1);
+
+    }
+
+    public void run() {
+
+      if (fromEmacs == null) return;
+      
+      try {
+	String line;
+	while ((line = fromEmacs.readLine()) != null) {
+	  toVM.println(line);
+	  toVM.flush();
+	}
+
+	if (!Application.this.isShuttingDown()) {
+	  try {
+	    // sioSocket.close();
+	    signal(MESSAGE, "Application closed its standard input.");
+	  } catch (Exception ex) {
+	    signal(MESSAGE, "Couldn't close socket to standard input.");
+	  }
+	}
+			
+      } catch (IOException ex) {
+	if (!Application.this.isShuttingDown()) {
+	  try {
+	    // sioSocket.close();
+	    signal(ERROR, "Input error; application I/O closed");
+	  } catch (Exception e) {
+	    signal(ERROR, "Input error; couldn't close application I/O");
+	  }
+	}
+      }
+    }
+
+    PrintStream toVM;
+    BufferedReader fromEmacs;
+
+  }
+
+
+  /**
+   * Writes a line to the socket connected to the
+   * standard I/O buffer maintained by Emacs for this
+   * application.
+   *
+   * <p>This class is used by the StandardOutputProcessor
+   * and StandardErrorProcessor to forward the application's
+   * standard ouput and error output to Emacs.
+   *
+   * @author "" <paulk@mathworks.com>
+   * @version 1.0
+   * @since 1.0
+   */
+  private class StandardOutputWriter {
+
+    public StandardOutputWriter(Socket sioSocket) {
+      if (sioSocket == null) {
+	signal(ERROR, "Could not transport app output. " +
+	       "Transport socket does not exist.");
+	return;   
+      }
+
+      OutputStream toEmacsStream;
+
+      try {
+	toEmacsStream = sioSocket.getOutputStream();
+	if (toEmacsStream == null) {
+	  signal(ERROR, "Could not transport app output. Transport socket closed.");
+	  return;
+	}
+      }
+      catch (IOException ex1) {
+	signal(ERROR, "Could not transport app output. Transport socket closed.");
+	return;
+      }
+
+      toEmacs = new BufferedWriter(new OutputStreamWriter(toEmacsStream));
+    }
+    
+    public void write(char[] cbuf, int len) {
+      if (toEmacs != null) {
+	try {
+	  toEmacs.write(cbuf, 0, len);
+	  toEmacs.flush();
+	}
+	catch (IOException ex1) {
+	  signal(ERROR, "I/O error: could not pipe application output to Emacs.");
+	}
+      }
+    }
+
+    BufferedWriter toEmacs;
+  }
+
+
+  /**
+   * Forwards the application's standard output to Emacs.
+   *
+   * @author Paul Kinnucan <paulk@mathworks.com>
+   * @version 1.0
+   * @since 1.0
+   * @see Thread
+   */
+  private class StandardOutputProcessor extends Thread {
+
+   public StandardOutputProcessor(InputStream fromVMStream) {
+      fromVM = new BufferedReader(new InputStreamReader(fromVMStream));
+      setPriority(Thread.MAX_PRIORITY-1);
+    }
+
+    public void run() {
+
+      String line;
+
+      try {
+	char[] cbuf = new char[256];
+	int len;
+	while ((len = fromVM.read(cbuf, 0, 256)) != -1) {
+	  synchronized (standardOutputWriter) {
+	    if (standardOutputWriter != null) {
+	      standardOutputWriter.write(cbuf, len);      
+	    } // end of if ()    
+	  }
+	}
+      }
+      catch (IOException ex) {
+      }
+
+      if (!Application.this.isShuttingDown()) {
+	try {
+	  // sioSocket.close();
+	  signal(MESSAGE, "Closed transport for application's standard output.");
+	} catch (Exception ex) {
+	  signal(ERROR, "Could not close application standard output transport.");
+	}
+      }
+    }
+
+    BufferedReader fromVM;
+
+  }
+
+
+  /**
+   * Forwards the application's error output to Emacs.
+   *
+   * @author Paulk Kinnucan <paulk@mathworks.com>
+   * @version 1.0
+   * @since 1.0
+   * @see Thread
+   */
+  private class StandardErrorProcessor extends Thread {
+
+    public StandardErrorProcessor(InputStream fromVMStream) {
+      super("Standard Error Processor for App #" + appID);
+      fromVM = new BufferedReader(new InputStreamReader(fromVMStream));
+      setPriority(Thread.MAX_PRIORITY-1);
+    }
+
+    public void run() {
+
+      String line;
+
+      try {
+	char[] cbuf = new char[256];
+	int len;
+	while ((len = fromVM.read(cbuf, 0, 256)) != -1) {
+	  synchronized (standardOutputWriter) {
+	    if (standardOutputWriter != null) {
+	      standardOutputWriter.write(cbuf, len);      
+	    } // end of if ()      
+	  }
+	}
+      }
+      catch (IOException ex) {
+      }
+
+      if (!Application.this.isShuttingDown()) {
+	try {
+	  // sioSocket.close();
+	  signal(MESSAGE, "Closed transport for application's standard error output.");
+	} catch (Exception ex) {
+	  signal(ERROR, "Could not close application standard error output transport.");
+	}
+      }
+    }
+
+    BufferedReader fromVM;
+
+  }
+
+    
+  /*
+   *
+   * USEFUL FUNCTIONS
+   *
+   */
+
+
+    
+  /**
+   * Return a list of ReferenceType objects for all
+   * currently loaded classes and interfaces whose name
+   * matches the given pattern.  The pattern syntax is
+   * open to some future revision, but currently consists
+   * of a fully-qualified class name in which the first
+   * component may optionally be a "*" character, designating
+   * an arbitrary prefix.
+   */
+  public List findClassesMatchingPattern(String pattern)
+    throws JDEException {
+    if (vm == null) return null;
+    List result = new ArrayList();  //### Is default size OK?
+    if (pattern.startsWith("*.")) {
+      // Wildcard matches any leading package name.
+      pattern = pattern.substring(1);
+      List classes = vm.allClasses();
+      Iterator iter = classes.iterator();
+      while (iter.hasNext()) {
+	ReferenceType type = ((ReferenceType)iter.next());
+	if (type.name().endsWith(pattern)) {
+	  result.add(type);
+	}
+      }
+      return result;
+    } else {
+      // It's a class name.
+      return vm.classesByName(pattern);
+    }
+  }
+
+
+
+  /*
+   *
+   * HANDLING JDE COMMANDS
+   *
+   */
+    
+
+
+  /**
+   * Primary function called by {@link Jdebug} when a command specific to
+   * a vm/app is received from jde.
+   *
+   * @param cmd_id Identifies a command uniquely. See {@link
+   * Jdebug#pendingCommands}
+   * @param command The command
+   * @param args And its arguments
+   */
+  public void handleCommand(Integer cmd_id, String command, List args) {
+
+    synchronized (pendingCommands) {
+      // first check if we already got a command with this cmd_id that
+      // we haven't handled yet.
+      if (pendingCommands.contains(cmd_id)) {
+	// return an "invalid" command id to indicate that the 
+	// command id itself is bad
+	signalCommandError(new Integer(-1), "Duplicate command id '"+cmd_id+"'");
+      }
+    }
+
+    try {
+      command = command.toLowerCase();
+      // finish up
+      if (command.equals(FINISH)) {
+	generalCommands.doFinish(cmd_id, args);
+      }
+     // get info about an object
+      else if (command.equals(GET_OBJECT)) {
+	generalCommands.doGetObject(cmd_id, args);
+      }
+      else if (command.equals(GET_LOADED_CLASSES)) {
+	generalCommands.doGetLoadedClasses(cmd_id, args);
+      }
+      // get path information
+      else if (command.equals(GET_PATH_INFORMATION)) {