Connection and Invocation Details |
Transports
Connectors
Sun VM Invocation Options
Debugging Plug-in Applets
Connecting with JDB
In establishing a connection between a debugger application and a target VM, one side acts as a server, listening for a connection. At some later time the other side attaches to the listener and a connection is established. JPDA transports allow either the debugger application or the target VM to act as a server. During the establishment of a connection, transport addresses are used to identify the other side of a connection. Transport addresses are strings; their format depends on the transport implementation.
The JPDA reference implementation on Microsoft Windows provides two transports: a shared memory transport and a socket transport. The JPDA reference implementation on the Solaris operating environment provides a socket transport. Future versions of the JPDA reference implementation may include additional transports, Future versions of the JPDA specification may provide an interface for plugging additional transports into an implementation.
In contexts where a client is attaching to a server, socket transport addresses have the format "<name>:<port>" where <name> is the host name and <port> is the socket port number at which it attaches or listens. In contexts where a server is waiting for a client to attach, the address consists of the port number alone (the host name is implicit).
Shared memory transport addresses are simply names that can be used as Microsoft Windows file-mapping object names.The name string can consist of any combination of characters, excluding the backslash.
A good JDI client application will allow users to choose and configure any connector that may be present, but it can be beneficial to incorporate knowledge of specific connectors into the debugger to make their configuration a more pleasant user experience. The example JDB implementation provided with the JPDA illustrates this approach.
The JDI reference implementations provides several connectors which map to the available transport types and the modes of connection (launching, listening, and attaching). These connectors are described in the following sections.
This connector is uniquely identified by the name
"com.sun.jdi.CommandLineLaunch".
name | required? | default value | description |
---|---|---|---|
home | no | current java.home property value | Location of the Java 2 Runtime Environment used to invoke the Target VM. |
options | no | "" | Options, in addition to the standard debugging options, with which to invoke the VM. |
main | yes | "" | The debugged application's main class and command line arguments. |
suspend | no | true | True if the target VM is to be suspended immediately before the main class is loaded; false otherwise. |
quote | yes | "\"" | The character used to combine space-delimited text on the command line. |
vmexec | yes | "java" | The VM launcher executable. This can be changed to javaw or to java_g for debugging, if that launcher is available. |
This connector is uniquely identified by the name "com.sun.jdi.RawCommandLineLaunch".
name | required? | default value | description |
---|---|---|---|
command | yes | "" | Full command line to invoke the target VM with the application to be debugged.. |
address | yes | "" | Transport address at which to listen for the newly launched target VM to connect. This value is typically part of the raw command argument as well, but this is not required if the target VM has some other means of determining the transport address to which it should connect. |
quote | yes | "\"" | The character used to combine space-delimited text on the command line. |
This connector is uniquely identified by the name "com.sun.jdi.SocketAttach".
name | required? | default value | description |
---|---|---|---|
hostname | no | local host name | Name of host machine to connect to. |
port | yes | "" | Port number on the host machine to connect to. |
This connector is uniquely identified by the name "com.sun.jdi.SharedMemoryAttach".
name | required? | default value | description |
---|---|---|---|
name | yes | "" | The shared memory transport address at which the target VM is listening.. |
This connector can accept connections from multiple target VMs.
This connector is uniquely identified by the name "com.sun.jdi.SocketListen".
name | required? | default value | description |
---|---|---|---|
port | yes | "" | Port number at which to listen for a connection.. |
This connector can accept connections from multiple target VMs.
This connector is uniquely identified by the name "com.sun.jdi.SharedMemoryListen".
name | required? | default value | description |
---|---|---|---|
name | yes | "" | A shared memory transport address at which to listen for the target VM connection. |
The Java HotSpot VM requires the -Xdebug and -Xrunjdwp options.
-Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...
The table below describes the options that can be used:
name | required? | default value | description |
---|---|---|---|
help | no | N/A | Prints a brief help message and exits the VM. |
transport | yes | none | Name of the transport to use in connecting to debugger application. |
server | no | "n" | If "y", listen for a debugger application to attach; otherwise, attach
to the debugger application at the specified address.
If "y" and no address is specified, choose a transport address at which to listen for a debugger application, and print the address to the standard output stream. |
address | yes, if server=n
no, otherwise |
"" | Transport address for the connection. If server=n, attempt to attach to debugger application at this address. If server=y, listen for a connection at this address. |
launch | no | none | At completion of JDWP initialization, launch the process given in this
string. This option is used in combination with onthrow and/or
onuncaught
to provide "Just-In-Time debugging" in which a debugger process is launched
when a particular event occurs in this VM.
Note that the launched process is not started in its own window. In most cases the launched process should be a small application which in turns launches the debugger application in its own window. The following strings are appended to the string given in this argument (space-delimited). They can aid the launched debugger in establishing a connection with this VM. The resulting string is executed.
|
onthrow | no | none | Delay initialization of the JDWP library until an exception of the given class is thrown in this VM. The exception class name must be package-qualified.Connection establishment is included in JDWP initialization, so it will not begin until the exception is thrown. |
onuncaught | no | "n" | If "y", delay initialization of the JDWP library until an uncaught exception is thrown in this VM. Connection establishment is included in JDWP initialization, so it will not begin until the exception is thrown. See the JDI specification for com.sun.jdi.ExceptionEvent for a definition of uncaught exceptions. |
stdalloc | no | "n" | By default, the JDWP reference implementation uses an alternate allocator for its memory allocation. If "y", the standard C runtime library allocator will be used. This option is mainly for testing; use it with care. Deadlocks can occur in this VM if the alternative allocator is disabled. |
strict | no | "n" | If "y", assume strict JVMDI conformance. This will disable all workarounds to known bugs in JVMDI implementations. This option is mainly for testing and should be used with care. |
suspend | no | "y" | If "y", VMStartEvent has a suspendPolicy of SUSPEND_ALL. If "n", VMStartEvent has a suspendPolicy of SUSPEND_NONE. |
JDI launching connectors cannot be used to debug Plug-in applets.
In JDB, the -attach option provides access to one of the attaching connectors in the reference implementation (shared memory on Microsoft Windows, sockets on the Solaris operating environment). The -listen option provides access to one of the listening connectors in the reference implementation (shared memory on Microsoft Windows, sockets on the Solaris operating environment). A class name and arguments specified directly on the command line provide access to the Sun command line launching connector.
For example:
jdb -attach myhost:8000
is an easy way to attach to a target VM with the Socket Attaching Connector (on the Solaris operating environment), and
jdb Hello 1 2 3
is an easy way to launch a target VM with the Sun Command Line Launching Connector.
However, the -connect option is also provided by JDB to handle any connector by taking an connector name and a set of arbitrary name/value argument pairs. For example the command lines above have the following equivalents.
jdb -connect com.sun.jdi.SocketAttach:hostname=myhost,port=8000
jdb -connect "com.sun.jdi.CommandLineLaunch:main=Hello 1 2 3"
These command lines are more cumbersome than the ones above, but the -connect option can be used with any connector. This kind of operation is a primitive example of how a JDI debugger can deal with any kind of connector while providing a simplified interface for dealing with common, well-known connectors.
Copyright © 2001 Sun
Microsystems, Inc. All Rights Reserved.
Please send comments to: java-debugger@sun.com |