<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
  <head>
    <title>Java(tm) Debug Interface</title>
  </head>
  <body>
	The Java<sup><font size="-2">TM</font></sup>
 Debug Interface (JDI) is a high level Java
API providing information useful for debuggers and similar
systems needing access to the running state of a (usually remote)
virtual machine.
<p>
	The JDI provides introspective
access to a running virtual machine's state, Class, Array,
Interface, and primitive types, and instances of those
types.
<P>
The JDI also provides explicit control over
a virtual machine's execution. The ability to suspend
and resume threads, and to set breakpoints, watchpoints, ...
Notification
of exceptions, class loading, thread creation...
The ability to inspect a suspended thread's state,
local variables, stack backtrace...
<p>
JDI is the highest-layer of the Java Platform Debugger Architecture (JPDA).
For more information on the Java Platform Debugger Architecture, see the
<a href="{@docRoot}/../../../../technotes/guides/jpda/index.html">
Java Platform Debugger Architecture documentation</a>
for this release and the
<a href="http://java.sun.com/products/jpda">Java Platform Debugger Architecture website</a>.
<p>
<font size="+1"><b>Global Exceptions:</b></font>
<p>
This section documents exceptions which apply to the entire API and are thus
not documented on individual methods.

    <blockquote>
        <p>
        <b>{@link com.sun.jdi.VMMismatchException}</b>
        <p>
            Any method on a {@link com.sun.jdi.Mirror} that takes a <code>Mirror</code> as an
            parameter directly or indirectly (e.g., as a element in a <code>List</code>) will
            throw {@link com.sun.jdi.VMMismatchException} if the mirrors are from different
            virtual machines.
        <p>
        <b>{@link java.lang.NullPointerException}</b>
        <p>
            Any method which takes a {@link java.lang.Object} as an parameter will throw
            {@link java.lang.NullPointerException} if null is passed directly or indirectly
            -- unless null is explicitly mentioned as a valid parameter.
        <p>
    </blockquote>
     NOTE: The exceptions below may be thrown whenever the specified
     conditions are met but a guarantee that they are thrown only
     exists when a valid result cannot be returned.
    <blockquote>
        <p>
        <b>{@link com.sun.jdi.VMDisconnectedException}</b>
        <p>
            Any method on {@link com.sun.jdi.ObjectReference}, {@link com.sun.jdi.ReferenceType},
            {@link com.sun.jdi.request.EventRequest}, {@link com.sun.jdi.StackFrame}, or
            {@link com.sun.jdi.VirtualMachine} or which takes one of these directly or indirectly
            as an parameter may throw {@link com.sun.jdi.VMDisconnectedException} if the target VM
            is disconnected and the {@link com.sun.jdi.event.VMDisconnectEvent} has been or is available
            to be read from the {@link com.sun.jdi.event.EventQueue}.
        <p>
        <b>{@link com.sun.jdi.VMOutOfMemoryException}</b>
        <p>
            Any method on {@link com.sun.jdi.ObjectReference}, {@link com.sun.jdi.ReferenceType},
            {@link com.sun.jdi.request.EventRequest}, {@link com.sun.jdi.StackFrame}, or
            {@link com.sun.jdi.VirtualMachine} or which takes one of these directly or indirectly
            as an parameter may throw {@link com.sun.jdi.VMOutOfMemoryException} if the target
            VM has run out of memory.
        <p>
        <b>{@link com.sun.jdi.ObjectCollectedException}</b>
        <p>
            Any method on {@link com.sun.jdi.ObjectReference} or which directly or indirectly takes
            <code>ObjectReference</code> as parameter may throw {@link com.sun.jdi.ObjectCollectedException}
            if the mirrored object has been garbage collected.
        <p>
            Any method on {@link com.sun.jdi.ReferenceType} or which directly or indirectly takes
            <code>ReferenceType</code> as parameter may throw {@link com.sun.jdi.ObjectCollectedException}
            if the mirrored type has been unloaded.

    </blockquote>
  </body>
</html>
