/*
 * Copyright 1998-2006 Sun Microsystems, Inc.  All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Sun designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Sun in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 * CA 95054 USA or visit www.sun.com if you need additional information or
 * have any questions.
 */

JDWP "Java(tm) Debug Wire Protocol"
(CommandSet VirtualMachine=1
    (Command Version=1 
        "Returns the JDWP version implemented by the target VM. "
	"The version string format is implementation dependent. "
	(Out 
        )
        (Reply 
	    (string description "Text information on the VM version")
	    (int    jdwpMajor   "Major JDWP Version number")
	    (int    jdwpMinor   "Minor JDWP Version number")
	    (string vmVersion   "Target VM JRE version, as in the java.version property")
	    (string vmName      "Target VM name, as in the java.vm.name property")
        )
        (ErrorSet
            (Error VM_DEAD)   
        )
    )
    (Command ClassesBySignature=2
        "Returns reference types for all the classes loaded by the target VM "
	"which match the given signature. "
	"Multple reference types will be returned if two or more class "
	"loaders have loaded a class of the same name. "
	"The search is confined to loaded classes only; no attempt is made "
	"to load a class of the given signature. "
	(Out
	    (string signature "JNI signature of the class to find "
	                      "(for example, \"Ljava/lang/String;\"). "
            )
        )
        (Reply 
            (Repeat classes "Number of reference types that follow." 
                (Group ClassInfo
                    (byte refTypeTag  "<a href=\"#JDWP_TypeTag\">Kind</a> "
		                      "of following reference type. ")
                    (referenceTypeID typeID "Matching loaded reference type")
                    (int status "The current class "
		                "<a href=\"#JDWP_ClassStatus\">status.</a> ")
                )
            )
        )
        (ErrorSet
            (Error VM_DEAD)
        )
    )
    (Command AllClasses=3
        "Returns reference types for all classes currently loaded by the "
	"target VM."
	(Out 
        )
        (Reply 
            (Repeat classes "Number of reference types that follow." 
                (Group ClassInfo
                    (byte refTypeTag  "<a href=\"#JDWP_TypeTag\">Kind</a> "
		                      "of following reference type. ")
                    (referenceTypeID typeID "Loaded reference type")
                    (string signature 
                                "The JNI signature of the loaded reference type")
                    (int status "The current class "
		                "<a href=\"#JDWP_ClassStatus\">status.</a> ")
                )
            )
        )
        (ErrorSet
            (Error VM_DEAD)
        )
    )
    (Command AllThreads=4
        "Returns all threads currently running in the target VM . "
	"The returned list contains threads created through "
	"java.lang.Thread, all native threads attached to "
	"the target VM through JNI, and system threads created "
	"by the target VM. Threads that have not yet been started "
	"and threads that have completed their execution are not "
	"included in the returned list. "
        (Out
        )
        (Reply
            (Repeat threads "Number of threads that follow." 
                (threadObject thread "A running thread")
            )
        )
        (ErrorSet
            (Error VM_DEAD)
        )
    )
    (Command TopLevelThreadGroups=5
        "Returns all thread groups that do not have a parent. This command "
	"may be used as the first step in building a tree (or trees) of the "
	"existing thread groups."
        (Out
        )
        (Reply
            (Repeat groups "Number of thread groups that follow." 
                (threadGroupObject group "A top level thread group")
            )
        )
        (ErrorSet
            (Error VM_DEAD)
        )
    )
    (Command Dispose=6
	"Invalidates this virtual machine mirror. "
	"The communication channel to the target VM is closed, and "
	"the target VM prepares to accept another subsequent connection "
	"from this debugger or another debugger, including the "
	"following tasks: "
	"<ul>"
	"<li>All event requests are cancelled. "
	"<li>All threads suspended by the thread-level "
	"<a href=\"#JDWP_ThreadReference_Resume\">resume</a> command "
	"or the VM-level "
	"<a href=\"#JDWP_VirtualMachine_Resume\">resume</a> command "
	"are resumed as many times as necessary for them to run. "
	"<li>Garbage collection is re-enabled in all cases where it was "
	"<a href=\"#JDWP_ObjectReference_DisableCollection\">disabled</a> "
	"</ul>"
	"Any current method invocations executing in the target VM "
	"are continued after the disconnection. Upon completion of any such "
	"method invocation, the invoking thread continues from the "
	"location where it was originally stopped. "
	"<p>"
	"Resources originating in  "
	"this VirtualMachine (ObjectReferences, ReferenceTypes, etc.) "
	"will become invalid. "
        (Out
        )
        (Reply
        )
        (ErrorSet
        )
    )
    (Command IDSizes=7
        "Returns the sizes of variably-sized data types in the target VM."
	"The returned values indicate the number of bytes used by the "
	"identifiers in command and reply packets."
        (Out
        )
        (Reply
            (int fieldIDSize "fieldID size in bytes ")
            (int methodIDSize "methodID size in bytes ")
            (int objectIDSize "objectID size in bytes ")
            (int referenceTypeIDSize "referenceTypeID size in bytes ")
            (int frameIDSize "frameID size in bytes ")
        )
        (ErrorSet
            (Error VM_DEAD)
        )
    )
    (Command Suspend=8
	"Suspends the execution of the application running in the target "
	"VM. All Java threads currently running will be suspended. "
	"<p>"
	"Unlike java.lang.Thread.suspend, "
	"suspends of both the virtual machine and individual threads are "
	"counted. Before a thread will run again, it must be resumed through "
	"the <a href=\"#JDWP_VirtualMachine_Resume\">VM-level resume</a> command "
	"or the <a href=\"#JDWP_ThreadReference_Resume\">thread-level resume</a> command "
	"the same number of times it has been suspended. "
        (Out
        )
        (Reply
        )
        (ErrorSet
            (Error VM_DEAD)
        )
    )
    (Command Resume=9
        "Resumes execution of the application after the suspend "
        "command or an event has stopped it. "
	"Suspensions of the Virtual Machine and individual threads are "
	"counted. If a particular thread is suspended n times, it must "
	"resumed n times before it will continue. "
        (Out
        )
        (Reply
        )
        (ErrorSet
        )
    )
    (Command Exit=10
        "Terminates the target VM with the given exit code. "
        "On some platforms, the exit code might be truncated, for "
        "example, to the low order 8 bits. "
	"All ids previously returned from the target VM become invalid. "
	"Threads running in the VM are abruptly terminated. "
	"A thread death exception is not thrown and "
	"finally blocks are not run."
        (Out
            (int exitCode "the exit code")
        )
        (Reply
        )
        (ErrorSet
        )
    )
    (Command CreateString=11
        "Creates a new string object in the target VM and returns "
	"its id. " 
        (Out
	    (string utf "UTF-8 characters to use in the created string. ")
        )
        (Reply
            (stringObject stringObject 
                "Created string (instance of java.lang.String) ")
        )
        (ErrorSet
            (Error VM_DEAD)
        )
    )
    (Command Capabilities=12
        "Retrieve this VM's capabilities. The capabilities are returned "
	"as booleans, each indicating the presence or absence of a "
	"capability. The commands associated with each capability will "
	"return the NOT_IMPLEMENTED error if the cabability is not "
	"available."
        (Out
        )
        (Reply
            (boolean canWatchFieldModification 
	             "Can the VM watch field modification, and therefore "
		     "can it send the Modification Watchpoint Event?")
            (boolean canWatchFieldAccess 
	             "Can the VM watch field access, and therefore "
		     "can it send the Access Watchpoint Event?")
            (boolean canGetBytecodes 
	             "Can the VM get the bytecodes of a given method? ")
            (boolean canGetSyntheticAttribute 
	             "Can the VM determine whether a field or method is "
		     "synthetic? (that is, can the VM determine if the "
		     "method or the field was invented by the compiler?) ")
            (boolean canGetOwnedMonitorInfo 
	             "Can the VM get the owned monitors infornation for "
		     "a thread?")
            (boolean canGetCurrentContendedMonitor 
	             "Can the VM get the current contended monitor of a thread?")
            (boolean canGetMonitorInfo 
	             "Can the VM get the monitor information for a given object? ")
        )
        (ErrorSet
            (Error VM_DEAD)
        )
    )
    (Command ClassPaths=13
        "Retrieve the classpath and bootclasspath of the target VM. "
	"If the classpath is not defined, returns an empty list. If the "
        "bootclasspath is not defined returns an empty list."
        (Out
        )
        (Reply
	    (string baseDir "Base directory used to resolve relative "
	                    "paths in either of the following lists.")
            (Repeat classpaths "Number of paths in classpath."
                (string path "One component of classpath") )
            (Repeat bootclasspaths "Number of paths in bootclasspath."
                (string path "One component of bootclasspath") )
        )
        (ErrorSet
            (Error VM_DEAD)
        )
    )
    (Command DisposeObjects=14
        "Releases a list of object IDs. For each object in the list, the "
        "following applies. "
        "The count of references held by the back-end (the reference "
        "count) will be decremented by refCnt. "
        "If thereafter the reference count is less than "
        "or equal to zero, the ID is freed. "
        "Any back-end resources associated with the freed ID may "
        "be freed, and if garbage collection was "
        "disabled for the object, it will be re-enabled. "
        "The sender of this command "
        "promises that no further commands will be sent "
        "referencing a freed ID.
	"<p>"
	"Use of this command is not required. If it is not sent, "
	"resources associated with each ID will be freed by the back-end "
	"at some time after the corresponding object is garbage collected. "
	"It is most useful to use this command to reduce the load on the "
	"back-end if a very large number of "
	"objects has been retrieved from the back-end (a large array, "
	"for example) but may not be garbage collected any time soon. "
	"<p>"
        "IDs may be re-used by the back-end after they "
        "have been freed with this command."
        "This description assumes reference counting, "
        "a back-end may use any implementation which operates "
        "equivalently. "
	(Out
	    (Repeat requests "Number of object dispose requests that follow"
		(Group Request
	 	    (object object "The object ID")
		    (int refCnt "The number of times this object ID has been "
				"part of a packet received from the back-end. "
				"An accurate count prevents the object ID "
				"from being freed on the back-end if "
				"it is part of an incoming packet, not yet "
				"handled by the front-end.")
		)
	    )
        )
        (Reply
        )
        (ErrorSet
        )
    )
    (Command HoldEvents=15
        "Tells the target VM to stop sending events. Events are not discarded; "
	"they are held until a subsequent ReleaseEvents command is sent. "
	"This command is useful to control the number of events sent "
	"to the debugger VM in situations where very large numbers of events "
	"are generated. "
	"While events are held by the debugger back-end, application "
	"execution may be frozen by the debugger back-end to prevent "
	"buffer overflows on the back end. 
	"Responses to commands are never held and are not affected by this 
	"command. If events are already being held, this command is "
	"ignored."
        (Out
        )
        (Reply
        )
        (ErrorSet
        )
    )
    (Command ReleaseEvents=16
        "Tells the target VM to continue sending events. This command is "
	"used to restore normal activity after a HoldEvents command. If "
	"there is no current HoldEvents command in effect, this command is "
	"ignored."
        (Out
        )
        (Reply
        )
        (ErrorSet
        )
    )
    (Command CapabilitiesNew=17
        "Retrieve all of this VM's capabilities. The capabilities are returned "
	"as booleans, each indicating the presence or absence of a "
	"capability. The commands associated with each capability will "
	"return the NOT_IMPLEMENTED error if the cabability is not "
	"available."
        "Since JDWP version 1.4."
        (Out
        )
        (Reply
            (boolean canWatchFieldModification 
	             "Can the VM watch field modification, and therefore "
		     "can it send the Modification Watchpoint Event?")
            (boolean canWatchFieldAccess 
	             "Can the VM watch field access, and therefore "
		     "can it send the Access Watchpoint Event?")
            (boolean canGetBytecodes 
	             "Can the VM get the bytecodes of a given method? ")
            (boolean canGetSyntheticAttribute 
	             "Can the VM determine whether a field or method is "
		     "synthetic? (that is, can the VM determine if the "
		     "method or the field was invented by the compiler?) ")
            (boolean canGetOwnedMonitorInfo 
	             "Can the VM get the owned monitors infornation for "
		     "a thread?")
            (boolean canGetCurrentContendedMonitor 
	             "Can the VM get the current contended monitor of a thread?")
            (boolean canGetMonitorInfo 
	             "Can the VM get the monitor information for a given object? ")
            (boolean canRedefineClasses 
	             "Can the VM redefine classes?")
            (boolean canAddMethod 
	             "Can the VM add methods when redefining "
                     "classes?")
            (boolean canUnrestrictedlyRedefineClasses 
	             "Can the VM redefine classes"
                     "in arbitrary ways?")
            (boolean canPopFrames
	             "Can the VM pop stack frames?")
            (boolean canUseInstanceFilters
	             "Can the VM filter events by specific object?")
            (boolean canGetSourceDebugExtension
	             "Can the VM get the source debug extension?")
            (boolean canRequestVMDeathEvent
	             "Can the VM request VM death events?")
            (boolean canSetDefaultStratum
	             "Can the VM set a default stratum?")
            (boolean canGetInstanceInfo
	             "Can the VM return instances, counts of instances of classes "
                     "and referring objects?")
            (boolean canRequestMonitorEvents
	             "Can the VM request monitor events?")
            (boolean canGetMonitorFrameInfo
	             "Can the VM get monitors with frame depth info?")
            (boolean canUseSourceNameFilters
	             "Can the VM filter class prepare events by source name?")
            (boolean canGetConstantPool
	             "Can the VM return the constant pool information?")
            (boolean canForceEarlyReturn
	             "Can the VM force early return from a method?")
            (boolean reserved22
	             "Reserved for future capability")
            (boolean reserved23
	             "Reserved for future capability")
            (boolean reserved24
	             "Reserved for future capability")
            (boolean reserved25
	             "Reserved for future capability")
            (boolean reserved26
	             "Reserved for future capability")
            (boolean reserved27
	             "Reserved for future capability")
            (boolean reserved28
	             "Reserved for future capability")
            (boolean reserved29
	             "Reserved for future capability")
            (boolean reserved30
	             "Reserved for future capability")
            (boolean reserved31
	             "Reserved for future capability")
            (boolean reserved32
	             "Reserved for future capability")
        )
        (ErrorSet
            (Error VM_DEAD)
        )
    )
    (Command RedefineClasses=18
        "Installs new class definitions. "	
	"If there are active stack frames in methods of the redefined classes in the "
	"target VM then those active frames continue to run the bytecodes of the "
	"original method. These methods are considered obsolete - see "
	"<a href=\"#JDWP_Method_IsObsolete\">IsObsolete</a>. The methods in the "
	"redefined classes will be used for new invokes in the target VM. "
	"The original method ID refers to the redefined method. "
	"All breakpoints in the redefined classes are cleared."
	"If resetting of stack frames is desired, the "
	"<a href=\"#JDWP_StackFrame_PopFrames\">PopFrames</a> command can be used "
	"to pop frames with obsolete methods."
	"<p>"
	"Requires canRedefineClasses capability - see "
	"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>. "
	"In addition to the canRedefineClasses capability, the target VM must "
	"have the canAddMethod capability to add methods when redefining classes, "
	"or the canUnrestrictedlyRedefineClasses to redefine classes in arbitrary "
	"ways."
	(Out 
            (Repeat classes "Number of reference types that follow." 
                (Group ClassDef
                    (referenceType refType "The reference type.")
                    (Repeat classfile "Number of bytes defining class (below)"
                         (byte classbyte "byte in JVM class file "
                                         "format.")
                    )
                )
            )
        )
        (Reply 
        )
        (ErrorSet
            (Error INVALID_CLASS    "One of the refTypes is not the ID of a reference "
                                    "type.")
            (Error INVALID_OBJECT   "One of the refTypes is not a known ID.")
            (Error UNSUPPORTED_VERSION)
            (Error INVALID_CLASS_FORMAT)
            (Error CIRCULAR_CLASS_DEFINITION)
            (Error FAILS_VERIFICATION)
            (Error NAMES_DONT_MATCH)
            (Error NOT_IMPLEMENTED  "No aspect of this functionality is implemented "
                                    "(CapabilitiesNew.canRedefineClasses is false)")
            (Error ADD_METHOD_NOT_IMPLEMENTED)
            (Error SCHEMA_CHANGE_NOT_IMPLEMENTED)
            (Error HIERARCHY_CHANGE_NOT_IMPLEMENTED)
            (Error DELETE_METHOD_NOT_IMPLEMENTED)
            (Error CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED)
            (Error METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED)
            (Error VM_DEAD)
        )
    )
    (Command SetDefaultStratum=19
        "Set the default stratum. Requires canSetDefaultStratum capability - see "
	"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
	(Out
	    (string stratumID "default stratum, or empty string to use "
                              "reference type default.")
        )
        (Reply
        )
        (ErrorSet
            (Error NOT_IMPLEMENTED)
            (Error VM_DEAD)
        )
    )
    (Command AllClassesWithGeneric=20
        "Returns reference types for all classes currently loaded by the "
	"target VM.  "
        "Both the JNI signature and the generic signature are "
        "returned for each class.  "
	"Generic signatures are described in the signature attribute "
        "section in the "
	"<a href=\"http://java.sun.com/docs/books/vmspec\">
        "Java Virtual Machine Specification, 3rd Edition.</a>  "
        "Since JDWP version 1.5."
	(Out 
        )
        (Reply 
            (Repeat classes "Number of reference types that follow." 
                (Group ClassInfo
                    (byte refTypeTag  "<a href=\"#JDWP_TypeTag\">Kind</a> "
		                      "of following reference type. ")
                    (referenceTypeID typeID "Loaded reference type")
                    (string signature 
                                "The JNI signature of the loaded reference type.")
                    (string genericSignature 
                                "The generic signature of the loaded reference type "
                                "or an empty string if there is none.")
                    (int status "The current class "
		                "<a href=\"#JDWP_ClassStatus\">status.</a> ")
                )
            )
        )
        (ErrorSet
            (Error VM_DEAD)
        )
    )
    
    (Command InstanceCounts=21
        "Returns the number of instances of each reference type in the input list. "
        "Only instances that are reachable for the purposes of "
        "garbage collection are counted.  If a reference type is invalid, "
        "eg. it has been unloaded, zero is returned for its instance count."
        "<p>Since JDWP version 1.6. Requires canGetInstanceInfo capability - see "
        "<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
        (Out
            (Repeat refTypesCount "Number of reference types that follow.    Must be non-negative."
                (referenceType refType "A reference type ID.")
            )
          )
        (Reply
            (Repeat counts "The number of counts that follow."
              (long instanceCount "The number of instances for the corresponding reference type "
                                  "in 'Out Data'.")
            )
        )
        (ErrorSet
            (Error ILLEGAL_ARGUMENT   "refTypesCount is less than zero.")
            (Error NOT_IMPLEMENTED)
            (Error VM_DEAD)
        )
    )
)

(CommandSet ReferenceType=2
    (Command Signature=1
        "Returns the JNI signature of a reference type. "
	"JNI signature formats are described in the "
	"<a href=\"http://java.sun.com/products/jdk/1.2/docs/guide/jni/index.html\">Java Native Inteface Specification</a>"
	"<p>
	"For primitive classes "
	"the returned signature is the signature of the corresponding primitive "
	"type; for example, \"I\" is returned as the signature of the class "
	"represented by java.lang.Integer.TYPE."
	(Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (string signature 
                "The JNI signature for the reference type.")
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command ClassLoader=2
        "Returns the instance of java.lang.ClassLoader which loaded "
        "a given reference type. If the reference type was loaded by the "
	"system class loader, the returned object ID is null."
        (Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (classLoaderObject classLoader "The class loader for the reference type. ")
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command Modifiers=3
        "Returns the modifiers (also known as access flags) for a reference type. "
	"The returned bit mask contains information on the declaration "
	"of the reference type. If the reference type is an array or " 
	"a primitive class (for example, java.lang.Integer.TYPE), the "
	"value of the returned bit mask is undefined."
        (Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (int modBits "Modifier bits as defined in the "
	                 "<a href=\"http://java.sun.com/docs/books/vmspec/html/ClassFile.doc.html\">VM Specification</a>")
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command Fields=4
        "Returns information for each field in a reference type. "
        "Inherited fields are not included. "
	"The field list will include any synthetic fields created "
	"by the compiler. "
        "Fields are returned in the order they occur in the class file."
        (Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (Repeat declared "Number of declared fields."
                (Group FieldInfo
                    (field fieldID "Field ID.")
                    (string name "Name of field.")
                    (string signature "JNI Signature of field.")
                    (int modBits "The modifier bit flags (also known as access flags) "
		                 "which provide additional information on the  "
                                 "field declaration. Individual flag values are "
				 "defined in the "
 	                         "<a href=\"http://java.sun.com/docs/books/vmspec/html/ClassFile.doc.html\">VM Specification</a>."
				 "In addition, The <code>0xf0000000</code> bit identifies "
				 "the field as synthetic, if the synthetic attribute "
				 "<a href=\"#JDWP_VirtualMachine_Capabilities\">capability</a> is available.")
                )
            )
        )
        (ErrorSet
            (Error CLASS_NOT_PREPARED)
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command Methods=5
        "Returns information for each method in a reference type. "
        "Inherited methods are not included. The list of methods will "
	"include constructors (identified with the name \"&lt;init&gt;\"), "
	"the initialization method (identified with the name \"&lt;clinit&gt;\") "
	"if present, and any synthetic methods created by the compiler. "
        "Methods are returned in the order they occur in the class file."
        (Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (Repeat declared "Number of declared methods."
                (Group MethodInfo
                    (method methodID "Method ID.")
                    (string name "Name of method.")
                    (string signature "JNI signature of method.")
                    (int modBits "The modifier bit flags (also known as access flags) "
		                 "which provide additional information on the  "
                                 "method declaration. Individual flag values are "
				 "defined in the "
 	                         "<a href=\"http://java.sun.com/docs/books/vmspec/html/ClassFile.doc.html\">VM Specification</a>."
				 "In addition, The <code>0xf0000000</code> bit identifies "
				 "the method as synthetic, if the synthetic attribute "
				 "<a href=\"#JDWP_VirtualMachine_Capabilities\">capability</a> is available.")
                )
            )
        )
        (ErrorSet
            (Error CLASS_NOT_PREPARED)
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command GetValues=6
        "Returns the value of one or more static fields of the "
	"reference type. Each field must be member of the reference type "
	"or one of its superclasses, superinterfaces, or implemented interfaces. "
	"Access control is not enforced; for example, the values of private "
	"fields can be obtained."
        (Out
            (referenceType refType "The reference type ID.")
            (Repeat fields "The number of values to get"	    	    
                (Group Field
                    (field fieldID "A field to get")
                )
            )
        )
        (Reply
            (Repeat values "The number of values returned, always equal to fields, "
	    		   "the number of values to get."	    
                (value value "The field value")
            )
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error INVALID_FIELDID)
            (Error VM_DEAD)
        )
    )
    (Command SourceFile=7
        "Returns the name of source file in which a reference type was "
	"declared. "
        (Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (string sourceFile "The source file name. No path information "
	                       "for the file is included")
        )
        (ErrorSet	    
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
	    (Error ABSENT_INFORMATION	"The source file attribute is absent.")	    
            (Error VM_DEAD)
        )
    )
    (Command NestedTypes=8
        "Returns the classes and interfaces directly nested within this type."
        "Types further nested within those types are not included. "
        (Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (Repeat classes "The number of nested classes and interfaces"
                (Group TypeInfo
                    (byte refTypeTag  "<a href=\"#JDWP_TypeTag\">Kind</a> "
		                      "of following reference type. ")
                    (referenceTypeID typeID "The nested class or interface ID.")
                )
            )
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command Status=9
        "Returns the current status of the reference type. The status "
	"indicates the extent to which the reference type has been "
	"initialized, as described in the "
	"<a href=\"http://java.sun.com/docs/books/vmspec/html/Concepts.doc.html#16491\">VM specification</a>. "
	"If the class is linked the PREPARED and VERIFIED bits in the returned status bits "
	"will be set. If the class is initialized the INITIALIZED bit in the returned "
	"status bits will be set. If an error occured during initialization then the "
	"ERROR bit in the returned status bits will be set. "	
	"The returned status bits are undefined for array types and for "
	"primitive classes (such as java.lang.Integer.TYPE). "		
        (Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (int status "<a href=\"#JDWP_ClassStatus\">Status</a> bits:"
                        "See <a href=\"#JDWP_ClassStatus\">JDWP.ClassStatus</a>")
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command Interfaces=10
        "Returns the interfaces declared as implemented by this class. "
        "Interfaces indirectly implemented (extended by the implemented "
        "interface or implemented by a superclass) are not included."
        (Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (Repeat interfaces "The number of implemented interfaces"
                (interfaceType interfaceType "implemented interface.")
            )
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command ClassObject=11
        "Returns the class object corresponding to this type. "
        (Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (classObject classObject "class object.")
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command SourceDebugExtension=12
        "Returns the value of the SourceDebugExtension attribute. "
        "Since JDWP version 1.4. Requires canGetSourceDebugExtension capability - see "
	"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
        (Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (string extension "extension attribute")
        )
        (ErrorSet
            (Error INVALID_CLASS      "refType is not the ID of a reference "
                                      "type.")
            (Error INVALID_OBJECT     "refType is not a known ID.")
            (Error ABSENT_INFORMATION "If the extension is not specified.")
            (Error NOT_IMPLEMENTED)
            (Error VM_DEAD)
        )
    )
    (Command SignatureWithGeneric=13
        "Returns the JNI signature of a reference type along with the "
        "generic signature if there is one.  "
	"Generic signatures are described in the signature attribute "
        "section in the "
	"<a href=\"http://java.sun.com/docs/books/vmspec\">
        "Java Virtual Machine Specification, 3rd Edition.</a>  "
        "Since JDWP version 1.5."
	"<p>
	(Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (string signature 
                "The JNI signature for the reference type.")
            (string genericSignature 
                "The generic signature for the reference type or an empty "
                "string if there is none.")
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command FieldsWithGeneric=14
        "Returns information, including the generic signature if any, "
        "for each field in a reference type. "
        "Inherited fields are not included. "
	"The field list will include any synthetic fields created "
	"by the compiler. "
        "Fields are returned in the order they occur in the class file.  "
	"Generic signatures are described in the signature attribute "
        "section in the "
	"<a href=\"http://java.sun.com/docs/books/vmspec\">
        "Java Virtual Machine Specification, 3rd Edition.</a>  "
        "Since JDWP version 1.5."
        (Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (Repeat declared "Number of declared fields."
                (Group FieldInfo
                    (field fieldID "Field ID.")
                    (string name "The name of the field.")
                    (string signature "The JNI signature of the field.")
                    (string genericSignature "The generic signature of the "
                                             "field, or an empty string if there is none.")
                    (int modBits "The modifier bit flags (also known as access flags) "
		                 "which provide additional information on the  "
                                 "field declaration. Individual flag values are "
				 "defined in the "
 	                         "<a href=\"http://java.sun.com/docs/books/vmspec/html/ClassFile.doc.html\">VM Specification</a>."
				 "In addition, The <code>0xf0000000</code> bit identifies "
				 "the field as synthetic, if the synthetic attribute "
				 "<a href=\"#JDWP_VirtualMachine_Capabilities\">capability</a> is available.")
                )
            )
        )
        (ErrorSet
            (Error CLASS_NOT_PREPARED)
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command MethodsWithGeneric=15
        "Returns information, including the generic signature if any, "
        "for each method in a reference type. "
        "Inherited methodss are not included. The list of methods will "
	"include constructors (identified with the name \"&lt;init&gt;\"), "
	"the initialization method (identified with the name \"&lt;clinit&gt;\") "
	"if present, and any synthetic methods created by the compiler. "
        "Methods are returned in the order they occur in the class file.  "
	"Generic signatures are described in the signature attribute "
        "section in the "
	"<a href=\"http://java.sun.com/docs/books/vmspec\">
        "Java Virtual Machine Specification, 3rd Edition.</a>  "
        "Since JDWP version 1.5."
        (Out
            (referenceType refType "The reference type ID.")
        )
        (Reply
            (Repeat declared "Number of declared methods."
                (Group MethodInfo
                    (method methodID "Method ID.")
                    (string name "The name of the method.")
                    (string signature "The JNI signature of the method.")
                    (string genericSignature "The generic signature of the method, or "
                                             "an empty string if there is none.")
                    (int modBits "The modifier bit flags (also known as access flags) "
		                 "which provide additional information on the  "
                                 "method declaration. Individual flag values are "
				 "defined in the "
 	                         "<a href=\"http://java.sun.com/docs/books/vmspec/html/ClassFile.doc.html\">VM Specification</a>."
				 "In addition, The <code>0xf0000000</code> bit identifies "
				 "the method as synthetic, if the synthetic attribute "
				 "<a href=\"#JDWP_VirtualMachine_Capabilities\">capability</a> is available.")
                )
            )
        )
        (ErrorSet
            (Error CLASS_NOT_PREPARED)
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command Instances=16
        "Returns instances of this reference type. " 
        "Only instances that are reachable for the purposes of "
        "garbage collection are returned. "
        "<p>Since JDWP version 1.6. Requires canGetInstanceInfo capability - see "
	"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
        (Out
            (referenceType refType "The reference type ID.")
            (int maxInstances "Maximum number of instances to return.  Must be non-negative. "
                              "If zero, all instances are returned.")
        )       
        (Reply
            (Repeat instances "The number of instances that follow."
                 (tagged-object instance "An instance of this reference type.")
             )
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error ILLEGAL_ARGUMENT  "maxInstances is less than zero.")
            (Error NOT_IMPLEMENTED)
            (Error VM_DEAD)
        )
    )
    (Command ClassFileVersion=17
	"Returns the class file major and minor version numbers, as defined in the class "
        "file format of the Java Virtual Machine specification. "
         "<p>Since JDWP version 1.6. "
        (Out
            (referenceType refType "The class.")
        )
        (Reply
	    (int majorVersion "Major version number")
	    (int minorVersion "Minor version number")		
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
	    (Error ABSENT_INFORMATION "The class file version information is "
				      "absent for primitive and array types.")	    
            (Error VM_DEAD)
        )
    )
    (Command ConstantPool=18
        "Return the raw bytes of the constant pool in the format of the "
        "constant_pool item of the Class File Format in the "
        "Java Virtual Machine Specification. "
        "<p>Since JDWP version 1.6. Requires canGetConstantPool capability - see "
	"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>.""
        (Out
            (referenceType refType "The class.")
        )
        (Reply
            (int count "Total number of constant pool entries plus one. This "
                       "corresponds to the constant_pool_count item of the "
                       "Class File Format in the Java Virtual Machine Specification. ")
            (Repeat bytes
                (byte cpbytes "Raw bytes of constant pool")
            )
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error NOT_IMPLEMENTED   "If the target virtual machine does not "
                                     "support the retrieval of constant pool information.")
	    (Error ABSENT_INFORMATION "The Constant Pool information is "
			              "absent for primitive and array types.")	    
            (Error VM_DEAD)
        )
    )
)
(CommandSet ClassType=3
    (Command Superclass=1
        "Returns the immediate superclass of a class."
        (Out
            (classType clazz "The class type ID.")
        )
        (Reply
            (classType superclass 
                "The superclass (null if the class ID for java.lang.Object is specified).")
        )
        (ErrorSet
            (Error INVALID_CLASS     "clazz is not the ID of a class.")
            (Error INVALID_OBJECT    "clazz is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command SetValues=2
        "Sets the value of one or more static fields. "
	"Each field must be member of the class type "
	"or one of its superclasses, superinterfaces, or implemented interfaces. "
	"Access control is not enforced; for example, the values of private "
	"fields can be set. Final fields cannot be set."
	"For primitive values, the value's type must match the "
	"field's type exactly. For object values, there must exist a "
	"widening reference conversion from the value's type to the 
	"field's type and the field's type must be loaded. "
        (Out
            (classType clazz "The class type ID.")
            (Repeat values "The number of fields to set."
                (Group FieldValue "A Field/Value pair."
                    (field fieldID "Field to set.")
                    (untagged-value value "Value to put in the field.")
                )
            )
        )
        (Reply "none"
        )
        (ErrorSet
            (Error INVALID_CLASS     "clazz is not the ID of a class.")
            (Error CLASS_NOT_PREPARED)
            (Error INVALID_OBJECT    "clazz is not a known ID or a value of an "
                                     "object field is not a known ID.")
            (Error INVALID_FIELDID)
            (Error VM_DEAD)
        ) 
    )
    (Command InvokeMethod=3
        "Invokes a static method. "
	"The method must be member of the class type "
	"or one of its superclasses, superinterfaces, or implemented interfaces. "
	"Access control is not enforced; for example, private "
	"methods can be invoked."
	"<p>"
	"The method invocation will occur in the specified thread. "
	"Method invocation can occur only if the specified thread "
	"has been suspended by an event. "
	"Method invocation is not supported "
	"when the target VM has been suspended by the front-end. "
	"<p>"
	"The specified method is invoked with the arguments in the specified "
	"argument list. "
	"The method invocation is synchronous; the reply packet is not "
	"sent until the invoked method returns in the target VM. "
	"The return value (possibly the void value) is "
	"included in the reply packet. "
	"If the invoked method throws an exception, the "
	"exception object ID is set in the reply packet; otherwise, the "
	"exception object ID is null. "
	"<p>"
	"For primitive arguments, the argument value's type must match the "
	"argument's type exactly. For object arguments, there must exist a "
	"widening reference conversion from the argument value's type to the "
	"argument's type and the argument's type must be loaded. "
	"<p>"
        "By default, all threads in the target VM are resumed while "
        "the method is being invoked if they were previously "
        "suspended by an event or by command. "
        "This is done to prevent the deadlocks "
        "that will occur if any of the threads own monitors "
        "that will be needed by the invoked method. It is possible that "
        "breakpoints or other events might occur during the invocation. "
        "Note, however, that this implicit resume acts exactly like "
        "the ThreadReference resume command, so if the thread's suspend "
        "count is greater than 1, it will remain in a suspended state "
	"during the invocation. By default, when the invocation completes, "
	"all threads in the target VM are suspended, regardless their state "
	"before the invocation. "
        "<p>"
        "The resumption of other threads during the invoke can be prevented "
        "by specifying the INVOKE_SINGLE_THREADED "
        "bit flag in the <code>options</code> field; however, "
        "there is no protection against or recovery from the deadlocks "
        "described above, so this option should be used with great caution. "
	"Only the specified thread will be resumed (as described for all "
	"threads above). Upon completion of a single threaded invoke, the invoking thread "
	"will be suspended once again. Note that any threads started during "
	"the single threaded invocation will not be suspended when the "
	"invocation completes. "
	"<p>"
        "If the target VM is disconnected during the invoke (for example, through "
        "the VirtualMachine dispose command) the method invocation continues. "
        (Out
            (classType clazz "The class type ID.")
            (threadObject thread "The thread in which to invoke.")
            (method methodID "The method to invoke.")
            (Repeat arguments 
                (value arg "The argument value.")
            )
            (int options "Invocation <a href=\"#JDWP_InvokeOptions\">options</a>")
        )
        (Reply
            (value returnValue "The returned value.")
            (tagged-object exception "The thrown exception.")
        )
        (ErrorSet
            (Error INVALID_CLASS     "clazz is not the ID of a class.")
            (Error INVALID_OBJECT    "clazz is not a known ID.")
            (Error INVALID_METHODID  "methodID is not the ID of a method.")
            (Error INVALID_THREAD)
            (Error THREAD_NOT_SUSPENDED)
            (Error VM_DEAD)
        )
    )
    (Command NewInstance=4
        "Creates a new object of this type, invoking the specified "
	"constructor. The constructor method ID must be a member of "
	"the class type."
	"<p>"
	"Instance creation will occur in the specified thread. "
	"Instance creation can occur only if the specified thread "
	"has been suspended by an event. "
	"Method invocation is not supported "
	"when the target VM has been suspended by the front-end. "
	"<p>"
	"The specified constructor is invoked with the arguments in the specified "
	"argument list. "
	"The constructor invocation is synchronous; the reply packet is not "
	"sent until the invoked method returns in the target VM. "
	"The return value (possibly the void value) is "
	"included in the reply packet. "
	"If the constructor throws an exception, the "
	"exception object ID is set in the reply packet; otherwise, the "
	"exception object ID is null. "
	"<p>"
	"For primitive arguments, the argument value's type must match the "
	"argument's type exactly. For object arguments, there must exist a "
	"widening reference conversion from the argument value's type to the "
	"argument's type and the argument's type must be loaded. "
	"<p>"
        "By default, all threads in the target VM are resumed while "
        "the method is being invoked if they were previously "
        "suspended by an event or by command. "
        "This is done to prevent the deadlocks "
        "that will occur if any of the threads own monitors "
        "that will be needed by the invoked method. It is possible that "
        "breakpoints or other events might occur during the invocation. "
        "Note, however, that this implicit resume acts exactly like "
        "the ThreadReference resume command, so if the thread's suspend "
        "count is greater than 1, it will remain in a suspended state "
	"during the invocation. By default, when the invocation completes, "
	"all threads in the target VM are suspended, regardless their state "
	"before the invocation. "
        "<p>"
        "The resumption of other threads during the invoke can be prevented "
        "by specifying the INVOKE_SINGLE_THREADED "
        "bit flag in the <code>options</code> field; however, "
        "there is no protection against or recovery from the deadlocks "
        "described above, so this option should be used with great caution. "
	"Only the specified thread will be resumed (as described for all "
	"threads above). Upon completion of a single threaded invoke, the invoking thread "
	"will be suspended once again. Note that any threads started during "
	"the single threaded invocation will not be suspended when the "
	"invocation completes. "
        "<p>"
        "If the target VM is disconnected during the invoke (for example, through "
        "the VirtualMachine dispose command) the method invocation continues. "
        (Out
            (classType clazz "The class type ID.")
            (threadObject thread "The thread in which to invoke the constructor.")
            (method methodID "The constructor to invoke.")
            (Repeat arguments 
                (value arg "The argument value.")
            )
            (int options "Constructor invocation <a href=\"#JDWP_InvokeOptions\">options</a>")
        )
        (Reply
            (tagged-object newObject "The newly created object, or null "
	                             "if the constructor threw an exception.")
            (tagged-object exception "The thrown exception, if any; otherwise, null.")
        )
        (ErrorSet
            (Error INVALID_CLASS     "clazz is not the ID of a class.")
            (Error INVALID_OBJECT    "clazz is not a known ID or a value of an "
                                     "object parameter is not a known ID..")
            (Error INVALID_METHODID  "methodID is not the ID of a method.")
            (Error INVALID_OBJECT)
            (Error INVALID_THREAD)
            (Error THREAD_NOT_SUSPENDED)
            (Error VM_DEAD)
        )
    )
)
(CommandSet ArrayType=4
    (Command NewInstance=1
        "Creates a new array object of this type with a given length."
        (Out
            (arrayType arrType "The array type of the new instance.")
            (int length "The length of the array.")
        )
        (Reply  
	    (tagged-object newArray "The newly created array object. ")
        )
        (ErrorSet
            (Error INVALID_ARRAY)
            (Error INVALID_OBJECT)
            (Error VM_DEAD)
        )
    )
)
(CommandSet InterfaceType=5
)
(CommandSet Method=6
    (Command LineTable=1
        "Returns line number information for the method, if present. "
	"The line table maps source line numbers to the initial code index "
	"of the line. The line table "
	"is ordered by code index (from lowest to highest). The line number " 
	"information is constant unless a new class definition is installed "
	"using <a href=\"#JDWP_VirtualMachine_RedefineClasses\">RedefineClasses</a>."	
        (Out
            (referenceType refType "The class.")
            (method methodID "The method.")
        )
        (Reply
            (long start "Lowest valid code index for the method, >=0, or -1 if the method is native ")
            (long end "Highest valid code index for the method, >=0, or -1 if the method is native")
            (Repeat lines "The number of entries in the line table for this method."
                (Group LineInfo
                    (long lineCodeIndex "Initial code index of the line, "
		    			"start <= lineCodeIndex < end")
                    (int lineNumber "Line number.")
                )
            )
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error INVALID_METHODID  "methodID is not the ID of a method.")
            (Error VM_DEAD)
        )
    )
    (Command VariableTable=2
        "Returns variable information for the method. The variable table "
	"includes arguments and locals declared within the method. For "
	"instance methods, the \"this\" reference is included in the "
	"table. Also, synthetic variables may be present. "
        (Out
            (referenceType refType "The class.")
            (method methodID "The method.")
        )
        (Reply
            (int argCnt "The number of words in the frame used by arguments. "
                        "Eight-byte arguments use two words; all others use one. ")
            (Repeat slots "The number of variables."
                (Group SlotInfo "Information about the variable."
                    (long codeIndex
		        "First code index at which the variable is visible (unsigned). "
		        "Used in conjunction with <code>length</code>. "
		        "The variable can be get or set only when the current "
			"<code>codeIndex</code> <= current frame code index < <code>codeIndex + length</code> ")
                    (string name "The variable's name.")
                    (string signature "The variable type's JNI signature.")
                    (int length 
		        "Unsigned value used in conjunction with <code>codeIndex</code>. "
		        "The variable can be get or set only when the current "
			"<code>codeIndex</code> <= current frame code index < <code>code index + length</code> ")
                    (int slot "The local variable's index in its frame")
                )
            )
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error INVALID_METHODID  "methodID is not the ID of a method.")
            (Error ABSENT_INFORMATION "there is no variable information for the method.")
            (Error VM_DEAD)
        )
    )
    (Command Bytecodes=3
        "Retrieve the method's bytecodes as defined in the JVM Specification."
	"Requires canGetBytecodes capability - see "
	"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
        (Out
            (referenceType refType "The class.")
            (method methodID "The method.")
        )
        (Reply
            (Repeat bytes
                (byte bytecode "A Java bytecode.")
            )
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error INVALID_METHODID  "methodID is not the ID of a method.")
            (Error NOT_IMPLEMENTED   "If the target virtual machine does not "
                                     "support the retrieval of bytecodes.")
            (Error VM_DEAD)
        )
    )
    (Command IsObsolete=4
        "Determine if this method is obsolete. A method is obsolete if it has been replaced "
	"by a non-equivalent method using the "
	"<a href=\"#JDWP_VirtualMachine_RedefineClasses\">RedefineClasses</a> command. "
	"The original and redefined methods are considered equivalent if their bytecodes are "
	"the same except for indices into the constant pool and the referenced constants are "
	"equal."
        (Out
            (referenceType refType "The class.")
            (method methodID "The method.")
        )
        (Reply
            (boolean isObsolete    "true if this method has been replaced"
                                   "by a non-equivalent method using"
				   "the RedefineClasses command.") 
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error INVALID_METHODID  "methodID is not the ID of a method.")
            (Error NOT_IMPLEMENTED   "If the target virtual machine does "
                                     "not support this query.")
            (Error VM_DEAD)
        )
    )
    (Command VariableTableWithGeneric=5
        "Returns variable information for the method, including "
        "generic signatures for the variables. The variable table "
	"includes arguments and locals declared within the method. For "
	"instance methods, the \"this\" reference is included in the "
	"table. Also, synthetic variables may be present. "
	"Generic signatures are described in the signature attribute "
        "section in the "
	"<a href=\"http://java.sun.com/docs/books/vmspec\">
        "Java Virtual Machine Specification, 3rd Edition.</a>  "
        "Since JDWP version 1.5."
        (Out
            (referenceType refType "The class.")
            (method methodID "The method.")
        )
        (Reply
            (int argCnt "The number of words in the frame used by arguments. "
                        "Eight-byte arguments use two words; all others use one. ")
            (Repeat slots "The number of variables."
                (Group SlotInfo "Information about the variable."
                    (long codeIndex
		        "First code index at which the variable is visible (unsigned). "
		        "Used in conjunction with <code>length</code>. "
		        "The variable can be get or set only when the current "
			"<code>codeIndex</code> <= current frame code index < <code>codeIndex + length</code> ")
                    (string name "The variable's name.")
                    (string signature "The variable type's JNI signature.")
                    (string genericSignature "The variable type's generic "
                         "signature or an empty string if there is none.")
                    (int length 
		        "Unsigned value used in conjunction with <code>codeIndex</code>. "
		        "The variable can be get or set only when the current "
			"<code>codeIndex</code> <= current frame code index < <code>code index + length</code> ")
                    (int slot "The local variable's index in its frame")
                )
            )
        )
        (ErrorSet
            (Error INVALID_CLASS     "refType is not the ID of a reference "
                                     "type.")
            (Error INVALID_OBJECT    "refType is not a known ID.")
            (Error INVALID_METHODID  "methodID is not the ID of a method.")
            (Error ABSENT_INFORMATION "there is no variable information for the method.")
            (Error VM_DEAD)
        )
    )

) 
(CommandSet Field=8
)
(CommandSet ObjectReference=9
    (Command ReferenceType=1
        "Returns the runtime type of the object. "
        "The runtime type will be a class or an array. "
        (Out
            (object object "The object ID")
        )
        (Reply
	    (byte refTypeTag  "<a href=\"#JDWP_TypeTag\">Kind</a> "
			      "of following reference type. ")
            (referenceTypeID typeID "The runtime reference type.")
        )
        (ErrorSet
            (Error INVALID_OBJECT)
            (Error VM_DEAD)
        )
    )
    (Command GetValues=2
        "Returns the value of one or more instance fields. "
	"Each field must be member of the object's type "
	"or one of its superclasses, superinterfaces, or implemented interfaces. "
	"Access control is not enforced; for example, the values of private "
	"fields can be obtained."
        (Out
            (object object "The object ID")
            (Repeat fields "The number of values to get"
                (Group Field
                    (field fieldID "Field to get.")
                )
            )
        )
        (Reply
            (Repeat values "The number of values returned, always equal to 'fields', "
	    		   "the number of values to get. Field values are ordered "
			   "in the reply in the same order as corresponding fieldIDs "
 			   "in the command."
                (value value "The field value")
            )
        )
        (ErrorSet
            (Error INVALID_OBJECT)
            (Error INVALID_FIELDID)
            (Error VM_DEAD)
        )
    )
    (Command SetValues=3
        "Sets the value of one or more instance fields. "
	"Each field must be member of the object's type "
	"or one of its superclasses, superinterfaces, or implemented interfaces. "
	"Access control is not enforced; for example, the values of private "
	"fields can be set. "
	"For primitive values, the value's type must match the "
	"field's type exactly. For object values, there must be a "
	"widening reference conversion from the value's type to the 
	"field's type and the field's type must be loaded. "
        (Out
            (object object "The object ID")
            (Repeat values "The number of fields to set."
                (Group FieldValue "A Field/Value pair."
                    (field fieldID "Field to set.")
                    (untagged-value value "Value to put in the field.")
                )
            )
        )
        (Reply "none"
        )
        (ErrorSet
            (Error INVALID_OBJECT)
            (Error INVALID_FIELDID)
            (Error VM_DEAD)
        ) 
    )
    (Command MonitorInfo=5
        "Returns monitor information for an object. All threads int the VM must "
	"be suspended."
	"Requires canGetMonitorInfo capability - see "
	"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
        (Out
            (object object "The object ID")
        )
        (Reply
            (threadObject owner "The monitor owner, or null if it is not currently owned.")
            (int entryCount "The number of times the monitor has been entered.")
            (Repeat waiters "The number of threads that are waiting for the monitor "
	                    "0 if there is no current owner"
                (threadObject thread "A thread waiting for this monitor.")
            )
        )
        (ErrorSet
            (Error INVALID_OBJECT)
            (Error NOT_IMPLEMENTED)
            (Error VM_DEAD)
        )
    )
    (Command InvokeMethod=6
        "Invokes a instance method. "
	"The method must be member of the object's type "
	"or one of its superclasses, superinterfaces, or implemented interfaces. "
	"Access control is not enforced; for example, private "
	"methods can be invoked."
	"<p>"
	"The method invocation will occur in the specified thread. "
	"Method invocation can occur only if the specified thread "
	"has been suspended by an event. "
	"Method invocation is not supported "
	"when the target VM has been suspended by the front-end. "
	"<p>"
	"The specified method is invoked with the arguments in the specified "
	"argument list. "
	"The method invocation is synchronous; the reply packet is not "
	"sent until the invoked method returns in the target VM. "
	"The return value (possibly the void value) is "
	"included in the reply packet. "
	"If the invoked method throws an exception, the "
	"exception object ID is set in the reply packet; otherwise, the "
	"exception object ID is null. "
	"<p>"
	"For primitive arguments, the argument value's type must match the "
	"argument's type exactly. For object arguments, there must be a "
	"widening reference conversion from the argument value's type to the "
	"argument's type and the argument's type must be loaded. "
	"<p>"
        "By default, all threads in the target VM are resumed while "
        "the method is being invoked if they were previously "
        "suspended by an event or by command. "
        "This is done to prevent the deadlocks "
        "that will occur if any of the threads own monitors "
        "that will be needed by the invoked method. It is possible that "
        "breakpoints or other events might occur during the invocation. "
        "Note, however, that this implicit resume acts exactly like "
        "the ThreadReference resume command, so if the thread's suspend "
        "count is greater than 1, it will remain in a suspended state "
	"during the invocation. By default, when the invocation completes, "
	"all threads in the target VM are suspended, regardless their state "
	"before the invocation. "
        "<p>"
        "The resumption of other threads during the invoke can be prevented "
        "by specifying the INVOKE_SINGLE_THREADED "
        "bit flag in the <code>options</code> field; however, "
        "there is no protection against or recovery from the deadlocks "
        "described above, so this option should be used with great caution. "
	"Only the specified thread will be resumed (as described for all "
	"threads above). Upon completion of a single threaded invoke, the invoking thread "
	"will be suspended once again. Note that any threads started during "
	"the single threaded invocation will not be suspended when the "
	"invocation completes. "
        "<p>"
        "If the target VM is disconnected during the invoke (for example, through "
        "the VirtualMachine dispose command) the method invocation continues. "
        (Out
            (object object "The object ID")
            (threadObject thread "The thread in which to invoke.")
            (classType clazz "The class type.")
            (method methodID "The method to invoke.")
            (Repeat arguments "The number of arguments."
                (value arg "The argument value.")
            )
            (int options "Invocation <a href=\"#JDWP_InvokeOptions\">options</a>")
        )
        (Reply
            (value returnValue "The returned value, or null if an exception is thrown.")
            (tagged-object exception "The thrown exception, if any.")
        )
        (ErrorSet
            (Error INVALID_OBJECT)
            (Error INVALID_CLASS     "clazz is not the ID of a reference "
                                     "type.")
            (Error INVALID_METHODID  "methodID is not the ID of a method.")
            (Error INVALID_THREAD)
            (Error THREAD_NOT_SUSPENDED)
            (Error VM_DEAD)
        )
    )
    (Command DisableCollection=7
	"Prevents garbage collection for the given object. By "
	"default all objects in back-end replies may be "
	"collected at any time the target VM is running. A call to "
	"this command guarantees that the object will not be "
	"collected. The "
	"<a href=\"#JDWP_ObjectReference_EnableCollection\">EnableCollection</a> "
	"command can be used to "
	"allow collection once again. "
	"<p>"
	"Note that while the target VM is suspended, no garbage "
	"collection will occur because all threads are suspended. "
	"The typical examination of variables, fields, and arrays "
	"during the suspension is safe without explicitly disabling "
	"garbage collection. "
	"<p>"
	"This method should be used sparingly, as it alters the "
	"pattern of garbage collection in the target VM and, "
	"consequently, may result in application behavior under the "
	"debugger that differs from its non-debugged behavior. "
	(Out 
	    (object object "The object ID")
	)
	(Reply "none"
        )
        (ErrorSet
            (Error INVALID_OBJECT)
            (Error VM_DEAD)
        )
    )
    (Command EnableCollection=8
	"Permits garbage collection for this object. By default all "
	"objects returned by JDWP may become unreachable in the target VM, "
	"and hence may be garbage collected. A call to this command is "
	"necessary only if garbage collection was previously disabled with "
	"the <a href=\"#JDWP_ObjectReference_DisableCollection\">DisableCollection</a> "
	"command."
        (Out 
            (object object "The object ID")
        )
        (Reply "none"
        )
        (ErrorSet
            (Error VM_DEAD)
        )
    )
    (Command IsCollected=9
        "Determines whether an object has been garbage collected in the "
	"target VM. "
        (Out
            (object object "The object ID")
        )
        (Reply
            (boolean isCollected "true if the object has been collected; false otherwise")
        )
        (ErrorSet
            (Error INVALID_OBJECT)
            (Error VM_DEAD)
        )
    )
    (Command ReferringObjects=10
        "Returns objects that directly reference this object.  "
        "Only objects that are reachable for the purposes "
        "of garbage collection are returned. "
        "Note that an object can also be referenced in other ways, "
        "such as from a local variable in a stack frame, or from a JNI global "
        "reference.  Such non-object referrers are not returned by this command. "
        "<p>Since JDWP version 1.6. Requires canGetInstanceInfo capability - see "
	"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
        (Out
            (object object "The object ID")
            (int maxReferrers "Maximum number of referring objects to return. "
                              "Must be non-negative. If zero, all referring "
                              "objects are returned.")
        )       
        (Reply
            (Repeat referringObjects "The number of objects that follow."
                (tagged-object instance "An object that references this object.")
             )
        )
        (ErrorSet
            (Error INVALID_OBJECT    "object is not a known ID.")
            (Error ILLEGAL_ARGUMENT  "maxReferrers is less than zero.")
            (Error NOT_IMPLEMENTED)
            (Error VM_DEAD)
        )
    )
)

(CommandSet StringReference=10
    (Command Value=1
        "Returns the characters contained in the string. "
        (Out
            (object stringObject "The String object ID. ")
        )
        (Reply
            (string stringValue "UTF-8 representation of the string value.")
       )
        (ErrorSet
            (Error INVALID_STRING)
            (Error INVALID_OBJECT)
            (Error VM_DEAD)
        )
    )
)
(CommandSet ThreadReference=11
    (Command Name=1
        "Returns the thread name. "
        (Out
            (threadObject thread "The thread object ID. ")
        )
        (Reply
            (string threadName "The thread name.")
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "thread is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command Suspend=2
        "Suspends the thread. "
	"<p>"
	"Unlike java.lang.Thread.suspend(), suspends of both "
	"the virtual machine and individual threads are counted. Before "
	"a thread will run again, it must be resumed the same number "
	"of times it has been suspended. "
	"<p>"
	"Suspending single threads with command has the same "
	"dangers java.lang.Thread.suspend(). If the suspended "
	"thread holds a monitor needed by another running thread, "
	"deadlock is possible in the target VM (at least until the "
	"suspended thread is resumed again). "
	"<p>"
	"The suspended thread is guaranteed to remain suspended until "
	"resumed through one of the JDI resume methods mentioned above; "
	"the application in the target VM cannot resume the suspended thread "
	"through {@link java.lang.Thread#resume}. "
	"<p>"
	"Note that this doesn't change the status of the thread (see the "
	"<a href=\"#JDWP_ThreadReference_Status\">ThreadStatus</a> command.) "
	"For example, if it was "
	"Running, it will still appear running to other threads. "
	(Out
	    (threadObject thread "The thread object ID. ")
	)
	(Reply "none"
	)
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "thread is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command Resume=3
	"Resumes the execution of a given thread. If this thread was "
	"not previously suspended by the front-end, "
	"calling this command has no effect. "
	"Otherwise, the count of pending suspends on this thread is "
	"decremented. If it is decremented to 0, the thread will "
	"continue to execute. "
        (Out
            (threadObject thread "The thread object ID. ")
        )
        (Reply "none"
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "thread is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command Status=4
        "Returns the current status of a thread. The thread status "
	"reply indicates the thread status the last time it was running. "
	"the suspend status provides information on the thread's "
	"suspension, if any."
        (Out
            (threadObject thread "The thread object ID. ")
        )
        (Reply 
            (int threadStatus "One of the thread status codes "
                    "See <a href=\"#JDWP_ThreadStatus\">JDWP.ThreadStatus</a>")
            (int suspendStatus "One of the suspend status codes "
                    "See <a href=\"#JDWP_SuspendStatus\">JDWP.SuspendStatus</a>")
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "thread is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command ThreadGroup=5
        "Returns the thread group that contains a given thread. "
        (Out
            (threadObject thread "The thread object ID. ")
        )
        (Reply
            (threadGroupObject group "The thread group of this thread. ")
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "thread is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command Frames=6
        "Returns the current call stack of a suspended thread. "
        "The sequence of frames starts with "
        "the currently executing frame, followed by its caller, "
        "and so on. The thread must be suspended, and the returned "
	"frameID is valid only while the thread is suspended. "
        (Out
            (threadObject thread "The thread object ID. ")
            (int startFrame "The index of the first frame to retrieve.")
            (int length 
                        "The count of frames to retrieve "
                        "(-1 means all remaining). ")
        )
        (Reply
            (Repeat frames "The number of frames retreived"
                (Group Frame
                    (frame frameID "The ID of this frame. ")
                    (location location "The current location of this frame")
                )
            )
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "thread is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command FrameCount=7
        "Returns the count of frames on this thread's stack. "
	"The thread must be suspended, and the returned "	   	
	"count is valid only while the thread is suspended. "	
        "Returns JDWP.Error.errorThreadNotSuspended if not suspended. "
        (Out
            (threadObject thread "The thread object ID. ")
        )
        (Reply
            (int frameCount "The count of frames on this thread's stack. ")
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "thread is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command OwnedMonitors=8
        "Returns the objects whose monitors have been entered by this thread. "
	"The thread must be suspended, and the returned information is "
	"relevant only while the thread is suspended. "
	"Requires canGetOwnedMonitorInfo capability - see "
	"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
        (Out
            (threadObject thread "The thread object ID. ")
        )
        (Reply
            (Repeat owned "The number of owned monitors"
                (tagged-object monitor "An owned monitor")
            )
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "thread is not a known ID.")
            (Error NOT_IMPLEMENTED)
            (Error VM_DEAD)
        )
    )
    (Command CurrentContendedMonitor=9
        "Returns the object, if any, for which this thread is waiting. The "
	"thread may be waiting to enter a monitor, or it may be waiting, via "
	"the java.lang.Object.wait method, for another thread to invoke the "
	"notify method. "
	"The thread must be suspended, and the returned information is "
	"relevant only while the thread is suspended. "
	"Requires canGetCurrentContendedMonitor capability - see "
	"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
        (Out
            (threadObject thread "The thread object ID. ")
        )
        (Reply
            (tagged-object monitor "The contended monitor, or null if "
	                           "there is no current contended monitor. ")
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "thread is not a known ID.")
            (Error NOT_IMPLEMENTED)
            (Error VM_DEAD)
        )
    )
    (Command Stop=10
        "Stops the thread with an asynchronous exception, as if done by "
	"java.lang.Thread.stop "
        (Out
            (threadObject thread "The thread object ID. ")
            (object throwable "Asynchronous exception. This object must "
	                      "be an instance of java.lang.Throwable or a subclass")
        )
        (Reply "none"
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT "If thread is not a known ID or the asynchronous "
                                  "exception has been garbage collected.")
            (Error VM_DEAD)
        )
    )
    (Command Interrupt=11
        "Interrupt the thread, as if done by java.lang.Thread.interrupt "
        (Out
            (threadObject thread "The thread object ID. ")
        )
        (Reply "none"
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "thread is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command SuspendCount=12
        "Get the suspend count for this thread. The suspend count is the  "
	"number of times the thread has been suspended through the "
	"thread-level or VM-level suspend commands without a corresponding resume "
        (Out
            (threadObject thread "The thread object ID. ")
        )
        (Reply 
            (int suspendCount "The number of outstanding suspends of this thread. ")
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "thread is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command OwnedMonitorsStackDepthInfo=13
        "Returns monitor objects owned by the thread, along with stack depth at which "
        "the monitor was acquired. Returns stack depth of -1  if "
        "the implementation cannot determine the stack depth "
        "(e.g., for monitors acquired by JNI MonitorEnter)."
	"The thread must be suspended, and the returned information is "
	"relevant only while the thread is suspended. "
	"Requires canGetMonitorFrameInfo capability - see "
	"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>. "
	"<p>Since JDWP version 1.6. "

        (Out
            (threadObject thread "The thread object ID. ")
        )
        (Reply
            (Repeat owned "The number of owned monitors"
	       (Group monitor
                  (tagged-object monitor "An owned monitor")
		  (int stack_depth "Stack depth location where monitor was acquired")
               )
            )
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "thread is not a known ID.")
            (Error NOT_IMPLEMENTED)
            (Error VM_DEAD)
        )
    )
    (Command ForceEarlyReturn=14
        "Force a method to return before it reaches a return "
        "statement.  "
	"<p>"
        "The method which will return early is referred to as the "
        "called method. The called method is the current method (as "
        "defined by the Frames section in the Java Virtual Machine "
        "Specification) for the specified thread at the time this command "
        "is received. "
	"<p>"
        "The specified thread must be suspended. "
        "The return occurs when execution of Java programming "
        "language code is resumed on this thread. Between sending this "
        "command and resumption of thread execution, the "
        "state of the stack is undefined. "
	"<p>"
        "No further instructions are executed in the called "
        "method. Specifically, finally blocks are not executed. Note: "
        "this can cause inconsistent states in the application. "
	"<p>"
        "A lock acquired by calling the called method (if it is a "
        "synchronized method) and locks acquired by entering "
        "synchronized blocks within the called method are "
        "released. Note: this does not apply to JNI locks or "
        "java.util.concurrent.locks locks. "
	"<p>"
        "Events, such as MethodExit, are generated as they would be in "
        "a normal return. "
	"<p>"
        "The called method must be a non-native Java programming "
        "language method. Forcing return on a thread with only one "
        "frame on the stack causes the thread to exit when resumed. "
	"<p>"
        "For void methods, the value must be a void value. " 
        "For methods that return primitive values, the value's type must "
        "match the return type exactly.  For object values, there must be a "
	"widening reference conversion from the value's type to the "
	"return type type and the return type must be loaded. "
        "<p>"
        "Since JDWP version 1.6. Requires canForceEarlyReturn capability - see "
	"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
        (Out
            (threadObject thread "The thread object ID. ")
            (value value "The value to return. ")
        )
        (Reply "none"
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "Thread or value is not a known ID.")
            (Error THREAD_NOT_SUSPENDED)
            (Error THREAD_NOT_ALIVE)
            (Error OPAQUE_FRAME      "Attempted to return early from "
                                     "a frame corresponding to a native "
                                     "method. Or the implementation is "
                                     "unable to provide this functionality "
                                     "on this frame.")
            (Error NO_MORE_FRAMES)
            (Error NOT_IMPLEMENTED)
            (Error TYPE_MISMATCH   "Value is not an appropriate type for the "
                                   "return value of the method.")
            (Error VM_DEAD)
        )
    )

)
(CommandSet ThreadGroupReference=12
    (Command Name=1
        "Returns the thread group name. "
        (Out
            (threadGroupObject group "The thread group object ID. ")
        )
        (Reply
            (string groupName "The thread group's name.")
        )
        (ErrorSet
            (Error INVALID_THREAD_GROUP)
            (Error INVALID_OBJECT    "group is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command Parent=2
        "Returns the thread group, if any, which contains a given thread group. "
        (Out
            (threadGroupObject group "The thread group object ID. ")
        )
        (Reply
            (threadGroupObject parentGroup "The parent thread group object, or "
	                                   "null if the given thread group "
					   "is a top-level thread group")
        )
        (ErrorSet
            (Error INVALID_THREAD_GROUP)
            (Error INVALID_OBJECT    "group is not a known ID.")
            (Error VM_DEAD)
        )
    )
    (Command Children=3
        "Returns the live threads and active thread groups directly contained "
        "in this thread group. Threads and thread groups in child "
	"thread groups are not included. "
        "A thread is alive if it has been started and has not yet been stopped. "
        "See <a href=../../../api/java/lang/ThreadGroup.html>java.lang.ThreadGroup </a>
        "for information about active ThreadGroups.
        (Out
            (threadGroupObject group "The thread group object ID. ")
        )
        (Reply
            (Repeat childThreads "The number of live child threads. "
                (threadObject childThread "A direct child thread ID. ")
            )
            (Repeat childGroups "The number of active child thread groups. "
                (threadGroupObject childGroup "A direct child thread group ID. ")
            )
        )
        (ErrorSet
            (Error INVALID_THREAD_GROUP)
            (Error INVALID_OBJECT    "group is not a known ID.")
            (Error VM_DEAD)
        )
    )
)
(CommandSet ArrayReference=13
    (Command Length=1
        "Returns the number of components in a given array. "
        (Out
            (arrayObject arrayObject "The array object ID. ")
        )
        (Reply
            (int arrayLength "The length of the array.")
        )
        (ErrorSet
            (Error INVALID_OBJECT    "arrayObject is not a known ID.")
            (Error INVALID_ARRAY)
            (Error VM_DEAD)
        )
    )
    (Command GetValues=2
        "Returns a range of array components. The specified range must "
	"be within the bounds of the array. "
        (Out
            (arrayObject arrayObject "The array object ID. ")
            (int firstIndex "The first index to retrieve.")
            (int length "The number of components to retrieve.")
        )
        (Reply
            (typed-sequence values "The retrieved values. If the values "
	                           "are objects, they are tagged-values; "
				   "otherwise, they are untagged-values")
        )
        (ErrorSet
            (Error INVALID_LENGTH "If index is beyond the end of this array.")
            (Error INVALID_OBJECT    "arrayObject is not a known ID.")
            (Error INVALID_ARRAY)
            (Error VM_DEAD)
        )
    )
    (Command SetValues=3
        "Sets a range of array components. The specified range must "
	"be within the bounds of the array. "
	"For primitive values, each value's type must match the "
	"array component type exactly. For object values, there must be a "
	"widening reference conversion from the value's type to the 
	"array component type and the array component type must be loaded. "
        (Out
            (arrayObject arrayObject "The array object ID. ")
            (int firstIndex "The first index to set.")
            (Repeat values "The number of values to set. "
                (untagged-value value "A value to set. ")
            )
        )
        (Reply "none"
        )
        (ErrorSet
            (Error INVALID_LENGTH "If index is beyond the end of this array.")
            (Error INVALID_OBJECT    "arrayObject is not a known ID.")
            (Error INVALID_ARRAY)
            (Error VM_DEAD)
        )
    )
)
(CommandSet ClassLoaderReference=14
    (Command VisibleClasses=1
	"Returns a list of all classes which this class loader has "
	"been requested to load. This class loader is considered to be "
	"an <i>initiating</i> class loader for each class in the returned "
	"list. The list contains each "
	"reference type defined by this loader and any types for which "
	"loading was delegated by this class loader to another class loader. "
	"<p>"
	"The visible class list has useful properties with respect to "
	"the type namespace. A particular type name will occur at most "
	"once in the list. Each field or variable declared with that "
	"type name in a class defined by "
	"this class loader must be resolved to that single type. "
	"<p>"
	"No ordering of the returned list is guaranteed. "
        (Out
            (classLoaderObject classLoaderObject "The class loader object ID. ")
        )
        (Reply
            (Repeat classes "The number of visible classes. "
                (Group ClassInfo
                    (byte refTypeTag  "<a href=\"#JDWP_TypeTag\">Kind</a> "
		                      "of following reference type. ")
                    (referenceTypeID typeID  
                        "A class visible to this class loader.")
                )
            )
        )
        (ErrorSet
            (Error INVALID_OBJECT)
            (Error INVALID_CLASS_LOADER)
            (Error VM_DEAD)
        )
    )
)
(CommandSet EventRequest=15
    (Command Set=1
        "Set an event request. When the event described by this request "
	"occurs, an <a href=\"#JDWP_Event\">event</a> is sent from the "
	"target VM. If an event occurs that has not been requested then it is not sent "
	"from the target VM. The two exceptions to this are the VM Start Event and "
	"the VM Death Event which are automatically generated events - see "
	"<a href=\"#JDWP_Event_Composite\">Composite Command</a> for further details."	
        (Out
            (byte eventKind "Event kind to request. "
                      "See <a href=\"#JDWP_EventKind\">JDWP.EventKind</a> "
		      "for a complete list of events that can be requested. "
		      )
            (byte suspendPolicy 
                      "What threads are suspended when this event occurs? "
                      "Note that the order of events and command replies "
		      "accurately reflects the order in which threads are "
		      "suspended and resumed. For example, if a "
		      "<a href=\"#JDWP_VirtualMachine_Resume\">VM-wide resume</a> "
		      "is processed before an event occurs which suspends the "
		      "VM, the reply to the resume command will be written to "
		      "the transport before the suspending event.")
            (Repeat modifiers "Constraints used to control the number "
	                      "of generated events."
                              "Modifiers specify additional tests that "
			      "an event must satisfy before it is placed "
			      "in the event queue. Events are filtered by "
                              "applying each modifier to an event in the "
			      "order they are specified in this collection "
			      "Only events that satisfy all modifiers "
			      "are reported. A value of 0 means there are no "
			      "modifiers in the request."
			      "<p>"
                              "Filtering can improve "
                              "debugger performance dramatically by 
			      "reducing the "
                              "amount of event traffic sent from the "
			      "target VM to the debugger VM. "
                (Select Modifier
                    (byte modKind "Modifier kind")
                    (Alt Count=1 
			"Limit the requested event to be reported at most once after a "
			"given number of occurrences.  The event is not reported "
			"the first <code>count - 1</code> times this filter is reached. "
			"To request a one-off event, call this method with a count of 1. "
			"<p>"
			"Once the count reaches 0, any subsequent filters in this request "
			"are applied. If none of those filters cause the event to be "
			"suppressed, the event is reported. Otherwise, the event is not "
			"reported. In either case subsequent events are never reported for "
			"this request. "
			"This modifier can be used with any event kind."
			
			(int count "Count before event. One for one-off.")
                    )
                    (Alt Conditional=2 "Conditional on expression"
                        (int exprID "For the future")
                    )
                    (Alt ThreadOnly=3 
		        "Restricts reported events to "
			"those in the given thread. "
			"This modifier can be used with any event kind "
			"except for class unload. "
			
                        (threadObject thread "Required thread")
                    )
                    (Alt ClassOnly=4 
			"For class prepare events, restricts the events "
			"generated by this request to be the "
			"preparation of the given reference type and any subtypes. "
			"For monitor wait and waited events, restricts the events "
        		"generated by this request to those whose monitor object "
        		"is of the given reference type or any of its subtypes. "
			"For other events, restricts the events generated "
			"by this request to those "
			"whose location is in the given reference type or any of its subtypes. "
			"An event will be generated for any location in a reference type that can "
			"be safely cast to the given reference type. "
			"This modifier can be used with any event kind except "
			"class unload, thread start, and thread end. "
     
                        (referenceType clazz "Required class")
                    )
                    (Alt ClassMatch=5 
			"Restricts reported events to those for classes whose name "
			"matches the given restricted regular expression. "
			"For class prepare events, the prepared class name "
			"is matched. For class unload events, the "
			"unloaded class name is matched. For monitor wait "
			"and waited events, the name of the class of the "
			"monitor object is matched. For other events, "
			"the class name of the event's location is matched. "
			"This modifier can be used with any event kind except "
			"thread start and thread end. "
			
                        (string classPattern "Required class pattern. "
				"Matches are limited to exact matches of the "
				"given class pattern and matches of patterns that "
				"begin or end with '*'; for example, "
				"\"*.Foo\" or \"java.*\". "
			)
			
                    )
                    (Alt ClassExclude=6 
			"Restricts reported events to those for classes whose name "
			"does not match the given restricted regular expression. "
			"For class prepare events, the prepared class name "
			"is matched. For class unload events, the "
			"unloaded class name is matched. For monitor wait and "
			"waited events, the name of the class of the monitor "
			"object is matched. For other events, "
			"the class name of the event's location is matched. "
			"This modifier can be used with any event kind except "
			"thread start and thread end. "
			
                        (string classPattern "Disallowed class pattern. "
				"Matches are limited to exact matches of the "
				"given class pattern and matches of patterns that "
				"begin or end with '*'; for example, "
				"\"*.Foo\" or \"java.*\". "
			)
                    )
                    (Alt LocationOnly=7 
		        "Restricts reported events to those that occur at "
			"the given location. "
			"This modifier can be used with "
			"breakpoint, field access, field modification, "
			"step, and exception event kinds. "
			
                        (location loc "Required location")
                    )
                    (Alt ExceptionOnly=8 
		        "Restricts reported exceptions by their class and "
			"whether they are caught or uncaught. "
			"This modifier can be used with "
			"exception event kinds only. "
			
                        (referenceType exceptionOrNull 
                                "Exception to report. Null (0) means report "
				"exceptions of all types. "
				"A non-null type restricts the reported exception "
				"events to exceptions of the given type or "
				"any of its subtypes. "
			)
                        (boolean caught "Report caught exceptions")
                        (boolean uncaught "Report uncaught exceptions. "
				"Note that it "
				"is not always possible to determine whether an "
				"exception is caught or uncaught at the time it is "
				"thrown. See the exception event catch location under "
				"<a href=\"#JDWP_Event_Composite\">composite events</a> "
				"for more information. "
			)
			
                    )
                    (Alt FieldOnly=9 
			"Restricts reported events to those that occur for "
			"a given field. "
			"This modifier can be used with "
			"field access and field modification event kinds only. "
			
                        (referenceType declaring "Type in which field is declared.")
                        (field fieldID "Required field")
                    )
                    (Alt Step=10 
		        "Restricts reported step events "
			"to those which satisfy "
			"depth and size constraints. "
			"This modifier can be used with "
			"step event kinds only. "
			
                        (threadObject thread "Thread in which to step")
                        (int size "size of each step. "
                           "See <a href=\"#JDWP_StepSize\">JDWP.StepSize</a>")
                        (int depth "relative call stack limit. "
                           "See <a href=\"#JDWP_StepDepth\">JDWP.StepDepth</a>")
                    )
                    (Alt InstanceOnly=11
			"Restricts reported events to those whose "
			"active 'this' object is the given object. "
			"Match value is the null object for static methods. "
			"This modifier can be used with any event kind "
			"except class prepare, class unload, thread start, "
			"and thread end. Introduced in JDWP version 1.4."
     
                        (object instance "Required 'this' object")
                    )
                    (Alt SourceNameMatch=12
			"Restricts reported class prepare events to those "
			"for reference types which have a source name "
                        "which matches the given restricted regular expression. "
                        "The source names are determined by the reference type's "
                        "<a href=\"#JDWP_ReferenceType_SourceDebugExtension\"> "
                        "SourceDebugExtension</a>. "
			"This modifier can only be used with class prepare "
                        "events. "
                        "Since JDWP version 1.6. Requires the canUseSourceNameFilters "
                        "capability - see "
                        "<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."

                        (string sourceNamePattern "Required source name pattern. "
				"Matches are limited to exact matches of the "
				"given pattern and matches of patterns that "
				"begin or end with '*'; for example, "
				"\"*.Foo\" or \"java.*\". "
                        )
                    )

                )
            ) 
        )
        (Reply
            (int requestID "ID of created request")
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_CLASS)
            (Error INVALID_STRING)
            (Error INVALID_OBJECT)
            (Error INVALID_COUNT)
            (Error INVALID_FIELDID)
            (Error INVALID_METHODID)
            (Error INVALID_LOCATION)
            (Error INVALID_EVENT_TYPE)
            (Error NOT_IMPLEMENTED)
            (Error VM_DEAD)
        )
    )
    (Command Clear=2
        "Clear an event request. See <a href=\"#JDWP_EventKind\">JDWP.EventKind</a> "
        "for a complete list of events that can be cleared. Only the event request matching " 
	"the specified event kind and requestID is cleared. If there isn't a matching event "
	"request the command is a no-op and does not result in an error. Automatically "
	"generated events do not have a corresponding event request and may not be cleared "
	"using this command."
        (Out
            (byte eventKind "Event kind to clear")
            (int requestID "ID of request to clear")
        )
        (Reply "none"
        )
        (ErrorSet
            (Error VM_DEAD)
	    (Error INVALID_EVENT_TYPE)
        )
    )
    (Command ClearAllBreakpoints=3
        "Removes all set breakpoints, a no-op if there are no breakpoints set."
        (Out "none"
        )
        (Reply "none"
        )
        (ErrorSet
            (Error VM_DEAD)
        )
    )
)
(CommandSet StackFrame=16
    (Command GetValues=1
        "Returns the value of one or more local variables in a "
	"given frame. Each variable must be visible at the frame's code index. "
	"Even if local variable information is not available, values can "
	"be retrieved if the front-end is able to "
	"determine the correct local variable index. (Typically, this "
	"index can be determined for method arguments from the method "
	"signature without access to the local variable table information.) "
        (Out
            (threadObject thread "The frame's thread. ")
            (frame frame "The frame ID. ")
            (Repeat slots "The number of values to get. "
                (Group SlotInfo 
                    (int slot "The local variable's index in the frame. ")
                    (byte sigbyte "A <a href=\"#JDWP_Tag\">tag</a> "
		                  "identifying the type of the variable ")
                )
            )   
        )
        (Reply
            (Repeat values "The number of values retrieved, always equal to slots, "
	    		   "the number of values to get."	    
                (value slotValue "The value of the local variable. ")
            )
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT)
            (Error INVALID_FRAMEID)
	    (Error INVALID_SLOT)
            (Error VM_DEAD)
        )
    )
    (Command SetValues=2
        "Sets the value of one or more local variables. "
	"Each variable must be visible at the current frame code index. "
	"For primitive values, the value's type must match the "
	"variable's type exactly. For object values, there must be a "
	"widening reference conversion from the value's type to the 
	"variable's type and the variable's type must be loaded. "
	"<p>"
	"Even if local variable information is not available, values can "
	"be set, if the front-end is able to "
	"determine the correct local variable index. (Typically, this 
	"index can be determined for method arguments from the method "
	"signature without access to the local variable table information.) "
        (Out
            (threadObject thread "The frame's thread. ")
            (frame frame "The frame ID. ")
            (Repeat slotValues "The number of values to set. "
                (Group SlotInfo 
                    (int slot "The slot ID. ")
                    (value slotValue "The value to set. ")
                )
            )   
        )
        (Reply "none"
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT)
            (Error INVALID_FRAMEID)
            (Error VM_DEAD)
        )
    )
    (Command ThisObject=3
        "Returns the value of the 'this' reference for this frame. "
        "If the frame's method is static or native, the reply "
        "will contain the null object reference. "
        (Out
            (threadObject thread "The frame's thread. ")
            (frame frame "The frame ID. ")
        )
        (Reply
            (tagged-object objectThis "The 'this' object for this frame. ")
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT)
            (Error INVALID_FRAMEID)
            (Error VM_DEAD)
        )
    )
    (Command PopFrames=4	
	"Pop the top-most stack frames of the thread stack, up to, and including 'frame'. "
	"The thread must be suspended to perform this command. "
	"The top-most stack frames are discarded and the stack frame previous to 'frame' "
	"becomes the current frame. The operand stack is restored -- the argument values "
	"are added back and if the invoke was not <code>invokestatic</code>, "
	"<code>objectref</code> is added back as well. The Java virtual machine "
	"program counter is restored to the opcode of the invoke instruction."	
	"<p>"
        "Since JDWP version 1.4. Requires canPopFrames capability - see "
	"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
        (Out
            (threadObject thread "The thread object ID. ")
            (frame frame "The frame ID. ")
        )
        (Reply "none"
        )
        (ErrorSet
            (Error INVALID_THREAD)
            (Error INVALID_OBJECT    "thread is not a known ID.")
            (Error INVALID_FRAMEID)
            (Error THREAD_NOT_SUSPENDED)
            (Error NO_MORE_FRAMES)
            (Error INVALID_FRAMEID)
            (Error NOT_IMPLEMENTED)
            (Error VM_DEAD)
        )
    )
)
(CommandSet ClassObjectReference=17
    (Command ReflectedType = 1
        "Returns the reference type reflected by this class object."
        (Out
            (classObject classObject "The class object. ")
        )
        (Reply
	    (byte refTypeTag  "<a href=\"#JDWP_TypeTag\">Kind</a> "
			      "of following reference type. ")
	    (referenceTypeID typeID "reflected reference type")
        )
        (ErrorSet
            (Error INVALID_OBJECT)
            (Error VM_DEAD)
        )
    )
)
(CommandSet Event=64
    (Command Composite=100
	"Several events may occur at a given time in the target VM. "
	"For example, there may be more than one breakpoint request "
	"for a given location "
	"or you might single step to the same location as a "
	"breakpoint request.  These events are delivered "
	"together as a composite event.  For uniformity, a " 
	"composite event is always used "
	"to deliver events, even if there is only one event to report. "
	"<P>"
	"The events that are grouped in a composite event are restricted in the "
	"following ways: "
	"<P>"
	"<UL>"
	"<LI>Only with other thread start events for the same thread:"
	"    <UL>"
	"    <LI>Thread Start Event"
	"    </UL>"
	"<LI>Only with other thread death events for the same thread:"
	"    <UL>"
	"    <LI>Thread Death Event"
	"    </UL>"
	"<LI>Only with other class prepare events for the same class:"
	"    <UL>"
	"    <LI>Class Prepare Event"
	"    </UL>"
	"<LI>Only with other class unload events for the same class:"
	"    <UL>"
	"    <LI>Class Unload Event"
	"    </UL>"
	"<LI>Only with other access watchpoint events for the same field access:"
	"    <UL>"
	"    <LI>Access Watchpoint Event"
	"    </UL>"
	"<LI>Only with other modification watchpoint events for the same field "
	"modification:"
	"    <UL>"
	"    <LI>Modification Watchpoint Event"
	"    </UL>"
	"<LI>Only with other Monitor contended enter events for the same monitor object: "
	"    <UL>"
	"    <LI>Monitor Contended Enter Event"
	"    </UL>"
	"<LI>Only with other Monitor contended entered events for the same monitor object: "
	"    <UL>"
	"    <LI>Monitor Contended Entered Event"
	"    </UL>"
	"<LI>Only with other Monitor wait events for the same monitor object: "
	"    <UL>"
	"    <LI>Monitor Wait Event"
	"    </UL>"
	"<LI>Only with other Monitor waited events for the same monitor object: "
	"    <UL>"
	"    <LI>Monitor Waited Event"
	"    </UL>"
	"<LI>Only with other ExceptionEvents for the same exception occurrance:"
	"    <UL>"
	"    <LI>ExceptionEvent"
	"    </UL>"
	"<LI>Only with other members of this group, at the same location "
	"and in the same thread: "
	"    <UL>"
	"    <LI>Breakpoint Event"
	"    <LI>Step Event"
	"    <LI>Method Entry Event"
	"    <LI>Method Exit Event"
	"    </UL>"
	"</UL>"
	"<P>"
	"The VM Start Event and VM Death Event are automatically generated events. "
	"This means they do not need to be requested using the "
	"<a href=\"#JDWP_EventRequest_Set\">EventRequest.Set</a> command. "
	"The VM Start event signals the completion of VM initialization. The VM Death "
	"event signals the termination of the VM." 	
	"If there is a debugger connected at the time when an automatically generated "
	"event occurs it is sent from the target VM. Automatically generated events may "
	"also be requested using the EventRequest.Set command and thus multiple events "
	"of the same event kind will be sent from the target VM when an event occurs."
	"Automatically generated events are sent with the requestID field "
	"in the Event Data set to 0. The value of the suspendPolicy field in the "
	"Event Data depends on the event. For the automatically generated VM Start "
	"Event the value of suspendPolicy is not defined and is therefore implementation "
	"or configuration specific. In the Sun implementation, for example, the "
	"suspendPolicy is specified as an option to the JDWP agent at launch-time."
	"The automatically generated VM Death Event will have the suspendPolicy set to "
	"NONE."			
	
       (Event "Generated event"
            (byte suspendPolicy 
                "Which threads where suspended by this composite event?")
            (Repeat events "Events in set."
                (Select Events
                    (byte eventKind "Event kind selector")
                    (Alt VMStart=JDWP.EventKind.VM_START 
			"Notification of initialization of a target VM.  This event is "
			"received before the main thread is started and before any "
			"application code has been executed. Before this event occurs "
			"a significant amount of system code has executed and a number "
			"of system classes have been loaded. "
			"This event is always generated by the target VM, even "
			"if not explicitly requested."
			
                     (int requestID 
			     "Request that generated event (or 0 if this "
			     "event is automatically generated.")
                        (threadObject thread "Initial thread")
                    ) 
                    (Alt SingleStep=JDWP.EventKind.SINGLE_STEP 
			"Notification of step completion in the target VM. The step event "
			"is generated before the code at its location is executed. "
			
                        (int requestID "Request that generated event")
                        (threadObject thread "Stepped thread")
                        (location location "Location stepped to")
                    ) 
                    (Alt Breakpoint=JDWP.EventKind.BREAKPOINT
			"Notification of a breakpoint in the target VM. The breakpoint event "
			"is generated before the code at its location is executed. "
			
                        (int requestID "Request that generated event")
                        (threadObject thread "Thread which hit breakpoint")
                        (location location "Location hit")
                    ) 
                    (Alt MethodEntry=JDWP.EventKind.METHOD_ENTRY
			 "Notification of a method invocation in the target VM. This event "
			 "is generated before any code in the invoked method has executed. "
			 "Method entry events are generated for both native and non-native "
			 "methods. "
			 "<P>"
			 "In some VMs method entry events can occur for a particular thread "
			 "before its thread start event occurs if methods are called "
			 "as part of the thread's initialization. "

                        (int requestID "Request that generated event")
                        (threadObject thread "Thread which entered method")
                        (location location "The initial executable location in the method.")
                    ) 
                    (Alt MethodExit=JDWP.EventKind.METHOD_EXIT
			 "Notification of a method return in the target VM. This event "
			 "is generated after all code in the method has executed, but the "
			 "location of this event is the last executed location in the method. "
			 "Method exit events are generated for both native and non-native "
			 "methods. Method exit events are not generated if the method terminates "
			 "with a thrown exception. "
			 
                        (int requestID "Request that generated event")
                        (threadObject thread "Thread which exited method")
                        (location location "Location of exit")
                    ) 
                    (Alt MethodExitWithReturnValue=JDWP.EventKind.METHOD_EXIT_WITH_RETURN_VALUE
			 "Notification of a method return in the target VM. This event "
			 "is generated after all code in the method has executed, but the "
			 "location of this event is the last executed location in the method. "
			 "Method exit events are generated for both native and non-native "
			 "methods. Method exit events are not generated if the method terminates "
			 "with a thrown exception. <p>Since JDWP version 1.6. "
			 
                        (int requestID "Request that generated event")
                        (threadObject thread "Thread which exited method")
                        (location location "Location of exit")
                        (value value "Value that will be returned by the method")
                    )
                    (Alt MonitorContendedEnter=JDWP.EventKind.MONITOR_CONTENDED_ENTER		    
			 "Notification that a thread in the target VM is attempting "
			 "to enter a monitor that is already acquired by another thread. "
			 "<p>Since JDWP version 1.6. "

                        (int requestID 
                                "Request that generated event")
		        (threadObject thread "Thread which is trying to enter the monitor")
			(tagged-object object "Monitor object reference")
		        (location location "Location of contended monitor enter")
                    )
                    (Alt MonitorContendedEntered=JDWP.EventKind.MONITOR_CONTENDED_ENTERED		    
 			 "Notification of a thread in the target VM is entering a monitor "
		         "after waiting for it to be released by another thread. "
			 "<p>Since JDWP version 1.6. "

                        (int requestID 
                                "Request that generated event")
		        (threadObject thread "Thread which entered monitor")
			(tagged-object object "Monitor object reference")
		        (location location "Location of contended monitor enter")
                    )
                    (Alt MonitorWait=JDWP.EventKind.MONITOR_WAIT		    
                         "Notification of a thread about to wait on a monitor object. "
			 "<p>Since JDWP version 1.6. "
 
                        (int requestID 
                                "Request that generated event")
		        (threadObject thread "Thread which is about to wait")
			(tagged-object object "Monitor object reference")
		        (location location "Location at which the wait will occur")
			(long     timeout  "Thread wait time in milliseconds")
                    )
                    (Alt MonitorWaited=JDWP.EventKind.MONITOR_WAITED		
			 "Notification that a thread in the target VM has finished waiting on "
		         "a monitor object. "
			 "<p>Since JDWP version 1.6. "

                        (int requestID 
                                "Request that generated event")
		        (threadObject thread "Thread which waited")
			(tagged-object object "Monitor object reference")
		        (location location "Location at which the wait occured")
			(boolean  timed_out "True if timed out")
                    )
                    (Alt Exception=JDWP.EventKind.EXCEPTION
			 "Notification of an exception in the target VM. "
			 "If the exception is thrown from a non-native method, "
			 "the exception event is generated at the location where the "
			 "exception is thrown. "
			 "If the exception is thrown from a native method, the exception event "
			 "is generated at the first non-native location reached after the exception "
			 "is thrown. "

                        (int requestID "Request that generated event")
                        (threadObject thread "Thread with exception")
                        (location location "Location of exception throw "
			"(or first non-native location after throw if thrown from a native method)")
                        (tagged-object exception "Thrown exception")
                        (location catchLocation 
			    "Location of catch, or 0 if not caught. An exception "
			    "is considered to be caught if, at the point of the throw, the "
			    "current location is dynamically enclosed in a try statement that "
			    "handles the exception. (See the JVM specification for details). "
			    "If there is such a try statement, the catch location is the "
			    "first location in the appropriate catch clause. "
			    "<p>"
			    "If there are native methods in the call stack at the time of the "
			    "exception, there are important restrictions to note about the "
			    "returned catch location. In such cases, "
			    "it is not possible to predict whether an exception will be handled "
			    "by some native method on the call stack. "
			    "Thus, it is possible that exceptions considered uncaught "
			    "here will, in fact, be handled by a native method and not cause "
			    "termination of the target VM. Furthermore, it cannot be assumed that the "
			    "catch location returned here will ever be reached by the throwing "
			    "thread. If there is "
			    "a native frame between the current location and the catch location, "
			    "the exception might be handled and cleared in that native method "
			    "instead. "
			    "<p>"
			    "Note that compilers can generate try-catch blocks in some cases "
			    "where they are not explicit in the source code; for example, "
			    "the code generated for <code>synchronized</code> and "
			    "<code>finally</code> blocks can contain implicit try-catch blocks. "
			    "If such an implicitly generated try-catch is "
			    "present on the call stack at the time of the throw, the exception "
			    "will be considered caught even though it appears to be uncaught from "
			    "examination of the source code. "
			)
                    ) 
                    (Alt ThreadStart=JDWP.EventKind.THREAD_START
			"Notification of a new running thread in the target VM. "
			"The new thread can be the result of a call to "
			"<code>java.lang.Thread.start</code> or the result of "
			"attaching a new thread to the VM though JNI. The "
			"notification is generated by the new thread some time before "
			"its execution starts. "
			"Because of this timing, it is possible to receive other events "
			"for the thread before this event is received. (Notably, "
			"Method Entry Events and Method Exit Events might occur "
			"during thread initialization. "
			"It is also possible for the "
   		        "<a href=\"#JDWP_VirtualMachine_AllThreads\">VirtualMachine AllThreads</a> "
			"command to return "
			"a thread before its thread start event is received. "
			"<p>"
			"Note that this event gives no information "
			"about the creation of the thread object which may have happened "
			"much earlier, depending on the VM being debugged. "
      	    
                        (int requestID "Request that generated event")
                        (threadObject thread "Started thread")
                    ) 
                    (Alt ThreadDeath=JDWP.EventKind.THREAD_DEATH
			"Notification of a completed thread in the target VM. The "
			"notification is generated by the dying thread before it terminates. "
			"Because of this timing, it is possible "
			"for {@link VirtualMachine#allThreads} to return this thread "
			"after this event is received. "
			"<p>"
			"Note that this event gives no information "
			"about the lifetime of the thread object. It may or may not be collected "
			"soon depending on what references exist in the target VM. "
		    
                        (int requestID "Request that generated event")
                        (threadObject thread "Ending thread")
                    ) 
                    (Alt ClassPrepare=JDWP.EventKind.CLASS_PREPARE
			"Notification of a class prepare in the target VM. See the JVM "
			"specification for a definition of class preparation. Class prepare "
			"events are not generated for primtiive classes (for example, "
			"java.lang.Integer.TYPE). "
			
                        (int requestID "Request that generated event")
                        (threadObject thread "Preparing thread. "
			     "In rare cases, this event may occur in a debugger system "
			     "thread within the target VM. Debugger threads take precautions "
			     "to prevent these events, but they cannot be avoided under some "
			     "conditions, especially for some subclasses of "
			     "java.lang.Error. "
			     "If the event was generated by a debugger system thread, the "
			     "value returned by this method is null, and if the requested  "
			     "<a href=\"#JDWP_SuspendPolicy\">suspend policy</a> "
			     "for the event was EVENT_THREAD "
			     "all threads will be suspended instead, and the "
			     "composite event's suspend policy will reflect this change. "
			     "<p>"
			     "Note that the discussion above does not apply to system threads "
			     "created by the target VM during its normal (non-debug) operation. "
			)
                        (byte refTypeTag  "Kind of reference type. "
                           "See <a href=\"#JDWP_TypeTag\">JDWP.TypeTag</a>")
                        (referenceTypeID typeID "Type being prepared")
                        (string signature "Type signature")
                        (int status "Status of type. "
                         "See <a href=\"#JDWP_ClassStatus\">JDWP.ClassStatus</a>")
                    ) 
                    (Alt ClassUnload=JDWP.EventKind.CLASS_UNLOAD
			 "Notification of a class unload in the target VM. "
			 "<p>"
			 "There are severe constraints on the debugger back-end during "
			 "garbage collection, so unload information is greatly limited.	"
			 
                        (int requestID "Request that generated event")
                        (string signature "Type signature")
                    )
                    (Alt FieldAccess=JDWP.EventKind.FIELD_ACCESS
			"Notification of a field access in the target VM. "
			"Field modifications "
			"are not considered field accesses. "
			"Requires canWatchFieldAccess capability - see "
			"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
			
                      (int requestID "Request that generated event")
                        (threadObject thread "Accessing thread")
                        (location location "Location of access")
                        (byte refTypeTag  "Kind of reference type. "
                           "See <a href=\"#JDWP_TypeTag\">JDWP.TypeTag</a>")
                        (referenceTypeID typeID "Type of field")
                        (field fieldID "Field being accessed")
                        (tagged-object object
                                "Object being accessed (null=0 for statics")
                    )
                    (Alt FieldModification=JDWP.EventKind.FIELD_MODIFICATION
			"Notification of a field modification in the target VM. "
			"Requires canWatchFieldModification capability - see "
			"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>."
			
                        (int requestID "Request that generated event")
                        (threadObject thread "Modifying thread")
                        (location location "Location of modify")
                        (byte refTypeTag  "Kind of reference type. "
                           "See <a href=\"#JDWP_TypeTag\">JDWP.TypeTag</a>")
                        (referenceTypeID typeID "Type of field")
                        (field fieldID "Field being modified")
                        (tagged-object object
                                "Object being modified (null=0 for statics")
                        (value valueToBe "Value to be assigned")
                    )
		    (Alt VMDeath=JDWP.EventKind.VM_DEATH		    
                        (int requestID 
                                "Request that generated event")
                    ) 
                )
            )
        )
    )
)
(ConstantSet Error
    (Constant NONE                   =0   "No error has occurred.")
    (Constant INVALID_THREAD         =10  "Passed thread is null, is not a valid thread or has exited.")
    (Constant INVALID_THREAD_GROUP   =11  "Thread group invalid.")   
    (Constant INVALID_PRIORITY       =12  "Invalid priority.")   
    (Constant THREAD_NOT_SUSPENDED   =13  "If the specified thread has not been "
                                          "suspended by an event.")   
    (Constant THREAD_SUSPENDED       =14  "Thread already suspended.")   
    (Constant THREAD_NOT_ALIVE       =15  "Thread has not been started or is now dead.")   

    (Constant INVALID_OBJECT         =20  "If this reference type has been unloaded "
                                          "and garbage collected.")   
    (Constant INVALID_CLASS          =21  "Invalid class.")  
    (Constant CLASS_NOT_PREPARED     =22  "Class has been loaded but not yet prepared.")   
    (Constant INVALID_METHODID       =23  "Invalid method.")   
    (Constant INVALID_LOCATION       =24  "Invalid location.")   
    (Constant INVALID_FIELDID        =25  "Invalid field.") 
    (Constant INVALID_FRAMEID        =30  "Invalid jframeID.")   
    (Constant NO_MORE_FRAMES         =31  "There are no more Java or JNI frames on the "
                                          "call stack.")   
    (Constant OPAQUE_FRAME           =32  "Information about the frame is not available.")  
    (Constant NOT_CURRENT_FRAME      =33  "Operation can only be performed on current frame.")
    (Constant TYPE_MISMATCH          =34  "The variable is not an appropriate type for "
                                          "the function used.")   
    (Constant INVALID_SLOT           =35  "Invalid slot.")  
    (Constant DUPLICATE              =40  "Item already set.")   
    (Constant NOT_FOUND              =41  "Desired element not found.")   
    (Constant INVALID_MONITOR        =50  "Invalid monitor.")   
    (Constant NOT_MONITOR_OWNER      =51  "This thread doesn't own the monitor.")   
    (Constant INTERRUPT              =52  "The call has been interrupted before completion.")   
    (Constant INVALID_CLASS_FORMAT   =60  "The virtual machine attempted to read a class "
                                          "file and determined that the file is malformed "
                                          "or otherwise cannot be interpreted as a class file.")
    (Constant CIRCULAR_CLASS_DEFINITION
                                     =61  "A circularity has been detected while "
                                          "initializing a class.")
    (Constant FAILS_VERIFICATION     =62  "The verifier detected that a class file, "
                                          "though well formed, contained some sort of "
                                          "internal inconsistency or security problem.")   
    (Constant ADD_METHOD_NOT_IMPLEMENTED
                                     =63  "Adding methods has not been implemented.")   
    (Constant SCHEMA_CHANGE_NOT_IMPLEMENTED
                                     =64  "Schema change has not been implemented.")   
    (Constant INVALID_TYPESTATE      =65  "The state of the thread has been modified, "
                                          "and is now inconsistent.")   
    (Constant HIERARCHY_CHANGE_NOT_IMPLEMENTED
                                     =66  "A direct superclass is different for the new class "
                                          "version, or the set of directly implemented "
                                          "interfaces is different "
                                          "and canUnrestrictedlyRedefineClasses is false.")   
    (Constant DELETE_METHOD_NOT_IMPLEMENTED
                                     =67  "The new class version does not declare a method "
                                          "declared in the old class version "
                                          "and canUnrestrictedlyRedefineClasses is false.")   
    (Constant UNSUPPORTED_VERSION    =68  "A class file has a version number not supported "
                                          "by this VM.")   
    (Constant NAMES_DONT_MATCH       =69  "The class name defined in the new class file is "
                                          "different from the name in the old class object.")   
    (Constant CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED 
                                     =70  "The new class version has different modifiers and "
                                          "and canUnrestrictedlyRedefineClasses is false.")   
    (Constant METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED
                                     =71  "A method in the new class version has "
                                          "different modifiers "
                                          "than its counterpart in the old class version and "
                                          "and canUnrestrictedlyRedefineClasses is false.")   
    (Constant NOT_IMPLEMENTED        =99  "The functionality is not implemented in "
                                          "this virtual machine.")
    (Constant NULL_POINTER           =100 "Invalid pointer.")   
    (Constant ABSENT_INFORMATION     =101 "Desired information is not available.")   
    (Constant INVALID_EVENT_TYPE     =102 "The specified event type id is not recognized.")   
    (Constant ILLEGAL_ARGUMENT       =103 "Illegal argument.")   
    (Constant OUT_OF_MEMORY          =110 "The function needed to allocate memory and "
                                          "no more memory was available for allocation.")   
    (Constant ACCESS_DENIED          =111 "Debugging has not been enabled in this "
                                          "virtual machine. JVMTI cannot be used.")   
    (Constant VM_DEAD                =112 "The virtual machine is not running.")   
    (Constant INTERNAL               =113 "An unexpected internal error has occurred.")   
    (Constant UNATTACHED_THREAD      =115 "The thread being used to call this function "
                                          "is not attached to the virtual machine. "
                                          "Calls must be made from attached threads.")   
    (Constant INVALID_TAG            =500 "object type id or class tag.")  
    (Constant ALREADY_INVOKING       =502 "Previous invoke not complete.")   
    (Constant INVALID_INDEX          =503 "Index is invalid.")   
    (Constant INVALID_LENGTH         =504 "The length is invalid.")   
    (Constant INVALID_STRING         =506 "The string is invalid.")   
    (Constant INVALID_CLASS_LOADER   =507 "The class loader is invalid.")   
    (Constant INVALID_ARRAY          =508 "The array is invalid.")   
    (Constant TRANSPORT_LOAD         =509 "Unable to load the transport.")   
    (Constant TRANSPORT_INIT         =510 "Unable to initialize the transport.")
    (Constant NATIVE_METHOD          =511  )
    (Constant INVALID_COUNT          =512 "The count is invalid.")   
)
(ConstantSet EventKind
    (Constant SINGLE_STEP            =1   )
    (Constant BREAKPOINT             =2   )
    (Constant FRAME_POP              =3   )
    (Constant EXCEPTION              =4   )
    (Constant USER_DEFINED           =5   )
    (Constant THREAD_START           =6   )
    (Constant THREAD_DEATH           =7   )
    (Constant THREAD_END             =7   "obsolete - was used in jvmdi")
    (Constant CLASS_PREPARE          =8   )
    (Constant CLASS_UNLOAD           =9   )
    (Constant CLASS_LOAD             =10  )
    (Constant FIELD_ACCESS           =20  )
    (Constant FIELD_MODIFICATION     =21  )
    (Constant EXCEPTION_CATCH        =30  )
    (Constant METHOD_ENTRY           =40  )
    (Constant METHOD_EXIT            =41  )
    (Constant METHOD_EXIT_WITH_RETURN_VALUE =42  )
    (Constant MONITOR_CONTENDED_ENTER          =43  )
    (Constant MONITOR_CONTENDED_ENTERED        =44  )
    (Constant MONITOR_WAIT           =45  )
    (Constant MONITOR_WAITED         =46  )
    (Constant VM_START               =90  )
    (Constant VM_INIT                =90  "obsolete - was used in jvmdi")
    (Constant VM_DEATH               =99  )
    (Constant VM_DISCONNECTED        =100 "Never sent across JDWP")
)

(ConstantSet ThreadStatus
    (Constant ZOMBIE                 =0  )
    (Constant RUNNING                =1  )
    (Constant SLEEPING               =2  )
    (Constant MONITOR                =3  )
    (Constant WAIT                   =4  )
)

(ConstantSet SuspendStatus
    (Constant SUSPEND_STATUS_SUSPENDED = 0x1 )             
)
(ConstantSet ClassStatus
    (Constant VERIFIED               =1  )
    (Constant PREPARED               =2  )
    (Constant INITIALIZED            =4  )
    (Constant ERROR                  =8  )
)
(ConstantSet TypeTag
    (Constant CLASS=1 "ReferenceType is a class. ")             
    (Constant INTERFACE=2 "ReferenceType is an interface. ")             
    (Constant ARRAY=3 "ReferenceType is an array. ")             
)
(ConstantSet Tag
    (Constant ARRAY = '[' "'[' - an array object (objectID size). ")
    (Constant BYTE = 'B' "'B' - a byte value (1 byte).")
    (Constant CHAR = 'C' "'C' - a character value (2 bytes).")
    (Constant OBJECT = 'L' "'L' - an object (objectID size).")
    (Constant FLOAT = 'F' "'F' - a float value (4 bytes).")
    (Constant DOUBLE = 'D' "'D' - a double value (8 bytes).")
    (Constant INT = 'I' "'I' - an int value (4 bytes).")
    (Constant LONG = 'J' "'J' - a long value (8 bytes).")
    (Constant SHORT = 'S' "'S' - a short value (2 bytes).")
    (Constant VOID = 'V' "'V' - a void value (no bytes).")
    (Constant BOOLEAN = 'Z' "'Z' - a boolean value (1 byte).")
    (Constant STRING = 's' "'s' - a String object (objectID size). ")
    (Constant THREAD = 't' "'t' - a Thread object (objectID size). ")
    (Constant THREAD_GROUP = 'g' 
        "'g' - a ThreadGroup object (objectID size). ")
    (Constant CLASS_LOADER = 'l' 
        "'l' - a ClassLoader object (objectID size). ")
    (Constant CLASS_OBJECT = 'c' 
        "'c' - a class object object (objectID size). ")
)

(ConstantSet StepDepth
    (Constant INTO = 0 
        "Step into any method calls that occur before the end of the step. ")
    (Constant OVER = 1 
        "Step over any method calls that occur before the end of the step. ")
    (Constant OUT = 2 
        "Step out of the current method. ")
)

(ConstantSet StepSize
    (Constant MIN = 0 
        "Step by the minimum possible amount (often a bytecode instruction). ")
    (Constant LINE = 1 
        "Step to the next source line unless there is no line number information in which case a MIN step is done instead.")
)

(ConstantSet SuspendPolicy
    (Constant NONE = 0 
        "Suspend no threads when this event is encountered. ")
    (Constant EVENT_THREAD = 1 
        "Suspend the event thread when this event is encountered. ")
    (Constant ALL = 2 
        "Suspend all threads when this event is encountered. ")
)
	
(ConstantSet InvokeOptions
    "The invoke options are a combination of zero or more of the following bit flags:"
    (Constant INVOKE_SINGLE_THREADED = 0x01
        "otherwise, all threads started. ")
    (Constant INVOKE_NONVIRTUAL = 0x02
        "otherwise, normal virtual invoke (instance methods only)")
)


