Just a little feedback about my experience using JDE to debug my java apps.

Well, after much fiddling, I finally got debugging to work with JDE.
My goal is to "just debug my java app". I was looking for something
relatively simple like gud-mode in emacs.

First of all, I've come to the conclusion that the best way to debug
java apps is by attaching to running processes. There appears two ways
to do this in JDE:
a. use JDEbug
b. use jdb mode, specifying -attach

In both cases, you have to start up your java app with special
switches. An example looks like (see references below for information
about all the switches):

 java -Xdebug
      -Xrunjdwp:transport=dt_socket,server=yes,suspend=yes,address=4444
      -Xnoagent -Djava.compiler=NONE <main-class-name>

JDEbug method
=============
Here are some observations.
- In order to get JDEbug to work, you need to set
  - jde-debugger to "JDEbug"
  - jde-sourcepath to directory where your java source resides
  - jde-jdk-registry to the java version your are using (and you have
    to set jde-jdk if you have more than one version of java installed).

It is the last variable that has seemingly changed since the
JDEbug documentation was published. The JDEbug doc talks about a
variables called jde-bug-vm-includes-jpda-p and jde-bug-jdk-directory,
both of which no longer exist. If you don't set jde-jdk-registry, then the
JDEbug debugger will be launched with an incorrect classpath, and the
debugger will fail when you try to listen or attach to a java
app. (The debugger process is launched when you say "Start Debugger").

  java -classpath 
/usr/local/lib/xemacs/xemacs-packages/etc/jde/java/lib/jde.jar:/usr/lib/tools.jar 
jde.debugger.Main

Note it says /usr/lib/tools.jar which is the incorrect path. 

You then start up the JDEbug process by selecting
  JDEbug->Processes->Start Debugger
  JDEbug->Processes->Attach Process->On Local Host
It prompts you for a "Process Port", and you need to enter the same one you
use when you launched the java app. 
I don't understand why it prompts you when there is a variable called
jde-bug-server-socket that should be the default.

Here is a sample prj.el:

(jde-project-file-version "1.0")
(jde-set-variables
 '(jde-debugger (quote ("JDEbug")))
 '(jde-sourcepath (quote ("/tmp/ffj")))
 '(jde-jdk-registry (quote (("1.3.1" . "/usr/j2se") ))))

I still encounter problems however with 
  Symbol's value as variable is void: old-assoc
but I think this is an XEmacs specific problem.

I can't quite figure out how to print variables, e.g. I'm not sure how
to use JDEbug->Display-Variable. But that is probably just me.

JDB method
==========
With this method you are invoking jdb with its "-attach" switch so
that jdb uses the JPDA debugger agent.

Have java (i.e. jdb) in your path.

To work with JDE, set the variables
- jde-debugger to "jdb"
- jde-sourcepath to directory where your java source resides

Then start up your java app as above. and run.
  Jdb->External Process->Attach to

There are variable to control various options (like the socket to use,
default is 4444; variable name is jde-db-option-connect-address).

I've sometimes encountered problems where jdb doesn't seem to work
right, and it causes jdb-mode to complain when it parses the
output. E.g. I would print a variable with "print foo", and there
would be a blank response. I type the command again and then it
works. This is obviously a jdb bug. But the JDE complain parsing the
output. I've seen "dump foo" fail also. I have to retry the command
several times before it responds. this popping up of the *Warning*
buffer is annoying, but I do understand it is jdb's fault, not JDE.

Here is a sample prj.el:

(jde-project-file-version "1.0")
(jde-set-variables
 '(jde-debugger (quote ("jdb")))
 '(jde-sourcepath (quote ("/tmp/ffj")))
)

Personal Comments
=================
- The jdb method also feels a lot more familiar, because it is more
  like good old gud-mode. It also feels a lot less "heavy". For
  instance, I like being able to type commands to jdb directly. 

References:
- How to use JDEbug (no link from the JDE home page)
  http://jdee.sunsite.dk/jdedoc/jdebug/ug/jdebug-ug.html
- Using jpda debugger agent - attaching to java processes for debugging
  http://java.sun.com/j2se/1.3/docs/guide/jpda/conninv.html
- Using jdb mode in JDE
  http://jdee.sunsite.dk/jdedoc/ug/jdb-guide.html
  - Doesn't mention setting jde-debugger variable (probably because
    jdb is the default).

XEmacs distributions of JDE (latest is jde package 1.38) also has the
documentation under xemacs-packages/etc/jde/doc/html/...

Reply via email to