blob: da61b541ad6e9bafd86b35dacae0d2a440953d2e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @author Pavel N. Vyssotski
*/
/**
* @file
* jdwp.h
*
*/
#ifndef _JDWP_H_
#define _JDWP_H_
/* JDWP Version */
#define JDWP_VERSION_MAJOR 1
#define JDWP_VERSION_MINOR 6
/* General JDWP constants */
#define JDWP_FLAG_REPLY_PACKET ((jbyte)0x80)
#define JDWP_MIN_PACKET_LENGTH 11
/* Command Sets */
typedef enum jdwpCommandSet {
JDWP_COMMAND_SET_VIRTUAL_MACHINE = 1,
JDWP_COMMAND_SET_REFERENCE_TYPE = 2,
JDWP_COMMAND_SET_CLASS_TYPE = 3,
JDWP_COMMAND_SET_ARRAY_TYPE = 4,
JDWP_COMMAND_SET_INTERFACE_TYPE = 5,
JDWP_COMMAND_SET_METHOD = 6,
JDWP_COMMAND_SET_FIELD = 8,
JDWP_COMMAND_SET_OBJECT_REFERENCE = 9,
JDWP_COMMAND_SET_STRING_REFERENCE = 10,
JDWP_COMMAND_SET_THREAD_REFERENCE = 11,
JDWP_COMMAND_SET_THREAD_GROUP_REFERENCE = 12,
JDWP_COMMAND_SET_ARRAY_REFERENCE = 13,
JDWP_COMMAND_SET_CLASS_LOADER_REFERENCE = 14,
JDWP_COMMAND_SET_EVENT_REQUEST = 15,
JDWP_COMMAND_SET_STACK_FRAME = 16,
JDWP_COMMAND_SET_CLASS_OBJECT_REFERENCE = 17,
JDWP_COMMAND_SET_EVENT = 64
} jdwpCommandSet;
typedef enum jdwpCommand {
/* Commands VirtualMachine */
JDWP_COMMAND_VM_VERSION = 1,
JDWP_COMMAND_VM_CLASSES_BY_SIGNATURE = 2,
JDWP_COMMAND_VM_ALL_CLASSES = 3,
JDWP_COMMAND_VM_ALL_THREADS = 4,
JDWP_COMMAND_VM_TOP_LEVEL_THREAD_GROUPS = 5,
JDWP_COMMAND_VM_DISPOSE = 6,
JDWP_COMMAND_VM_ID_SIZES = 7,
JDWP_COMMAND_VM_SUSPEND = 8,
JDWP_COMMAND_VM_RESUME = 9,
JDWP_COMMAND_VM_EXIT = 10,
JDWP_COMMAND_VM_CREATE_STRING = 11,
JDWP_COMMAND_VM_CAPABILITIES = 12,
JDWP_COMMAND_VM_CLASS_PATHS = 13,
JDWP_COMMAND_VM_DISPOSE_OBJECTS = 14,
JDWP_COMMAND_VM_HOLD_EVENTS = 15,
JDWP_COMMAND_VM_RELEASE_EVENTS = 16,
JDWP_COMMAND_VM_CAPABILITIES_NEW = 17,
JDWP_COMMAND_VM_REDEFINE_CLASSES = 18,
JDWP_COMMAND_VM_SET_DEFAULT_STRATUM = 19,
JDWP_COMMAND_VM_ALL_CLASSES_WITH_GENERIC= 20,
//New commands for Java 6
JDWP_COMMAND_VM_INSTANCE_COUNTS = 21,
/* Commands ReferenceType */
JDWP_COMMAND_RT_SIGNATURE = 1,
JDWP_COMMAND_RT_CLASS_LOADER = 2,
JDWP_COMMAND_RT_MODIFIERS = 3,
JDWP_COMMAND_RT_FIELDS = 4,
JDWP_COMMAND_RT_METHODS = 5,
JDWP_COMMAND_RT_GET_VALUES = 6,
JDWP_COMMAND_RT_SOURCE_FILE = 7,
JDWP_COMMAND_RT_NESTED_TYPES = 8,
JDWP_COMMAND_RT_STATUS = 9,
JDWP_COMMAND_RT_INTERFACES = 10,
JDWP_COMMAND_RT_CLASS_OBJECT = 11,
JDWP_COMMAND_RT_SOURCE_DEBUG_EXTENSION = 12,
JDWP_COMMAND_RT_SIGNATURE_WITH_GENERIC = 13,
JDWP_COMMAND_RT_FIELDS_WITH_GENERIC = 14,
JDWP_COMMAND_RT_METHODS_WITH_GENERIC = 15,
//New commands for Java 6
JDWP_COMMAND_RT_INSTANCES = 16,
JDWP_COMMAND_RT_CLASS_FILE_VERSION = 17,
JDWP_COMMAND_RT_CONSTANT_POOL = 18,
/* Commands ClassType */
JDWP_COMMAND_CT_SUPERCLASS = 1,
JDWP_COMMAND_CT_SET_VALUES = 2,
JDWP_COMMAND_CT_INVOKE_METHOD = 3,
JDWP_COMMAND_CT_NEW_INSTANCE = 4,
/* Commands ArrayType */
JDWP_COMMAND_AT_NEW_INSTANCE = 1,
/* Commands Method */
JDWP_COMMAND_M_LINE_TABLE = 1,
JDWP_COMMAND_M_VARIABLE_TABLE = 2,
JDWP_COMMAND_M_BYTECODES = 3,
JDWP_COMMAND_M_OBSOLETE = 4,
JDWP_COMMAND_M_VARIABLE_TABLE_WITH_GENERIC = 5,
/* Commands ObjectReference */
JDWP_COMMAND_OR_REFERENCE_TYPE = 1,
JDWP_COMMAND_OR_GET_VALUES = 2,
JDWP_COMMAND_OR_SET_VALUES = 3,
JDWP_COMMAND_OR_MONITOR_INFO = 5,
JDWP_COMMAND_OR_INVOKE_METHOD = 6,
JDWP_COMMAND_OR_DISABLE_COLLECTION = 7,
JDWP_COMMAND_OR_ENABLE_COLLECTION = 8,
JDWP_COMMAND_OR_IS_COLLECTED = 9,
// New commands for Java 6
JDWP_COMMAND_OR_REFERRING_OBJECTS = 10,
/* Commands StringReference */
JDWP_COMMAND_SR_VALUE = 1,
/* Commands ThreadReference */
JDWP_COMMAND_TR_NAME = 1,
JDWP_COMMAND_TR_SUSPEND = 2,
JDWP_COMMAND_TR_RESUME = 3,
JDWP_COMMAND_TR_STATUS = 4,
JDWP_COMMAND_TR_THREAD_GROUP = 5,
JDWP_COMMAND_TR_FRAMES = 6,
JDWP_COMMAND_TR_FRAME_COUNT = 7,
JDWP_COMMAND_TR_OWNED_MONITORS = 8,
JDWP_COMMAND_TR_CURRENT_CONTENDED_MONITOR = 9,
JDWP_COMMAND_TR_STOP = 10,
JDWP_COMMAND_TR_INTERRUPT = 11,
JDWP_COMMAND_TR_SUSPEND_COUNT = 12,
// New command for Java 6
JDWP_COMMAND_TR_OWNED_MONITORS_STACK_DEPTH = 13,
JDWP_COMMAND_TR_FORCE_EARLY_RETURN = 14,
/* Commands ThreadGroupReference */
JDWP_COMMAND_TGR_NAME = 1,
JDWP_COMMAND_TGR_PARENT = 2,
JDWP_COMMAND_TGR_CHILDREN = 3,
/* Commands ArrayReference */
JDWP_COMMAND_AR_LENGTH = 1,
JDWP_COMMAND_AR_GET_VALUES = 2,
JDWP_COMMAND_AR_SET_VALUES = 3,
/* Commands ClassLoaderReference */
JDWP_COMMAND_CLR_VISIBLE_CLASSES = 1,
/* Commands EventRequest */
JDWP_COMMAND_ER_SET = 1,
JDWP_COMMAND_ER_CLEAR = 2,
JDWP_COMMAND_ER_CLEAR_ALL_BREAKPOINTS = 3,
/* Commands StackFrame */
JDWP_COMMAND_SF_GET_VALUES = 1,
JDWP_COMMAND_SF_SET_VALUES = 2,
JDWP_COMMAND_SF_THIS_OBJECT = 3,
JDWP_COMMAND_SF_POP_FRAME = 4,
/* Commands ClassObjectReference */
JDWP_COMMAND_COR_REFLECTED_TYPE = 1,
/* Commands Event */
JDWP_COMMAND_E_COMPOSITE = 100
} jdwpCommand;
/* Error Constants */
typedef enum jdwpError {
JDWP_ERROR_NONE = 0,
JDWP_ERROR_INVALID_THREAD = 10,
JDWP_ERROR_INVALID_THREAD_GROUP = 11,
JDWP_ERROR_INVALID_PRIORITY = 12,
JDWP_ERROR_THREAD_NOT_SUSPENDED = 13,
JDWP_ERROR_THREAD_SUSPENDED = 14,
JDWP_ERROR_INVALID_OBJECT = 20,
JDWP_ERROR_INVALID_CLASS = 21,
JDWP_ERROR_CLASS_NOT_PREPARED = 22,
JDWP_ERROR_INVALID_METHODID = 23,
JDWP_ERROR_INVALID_LOCATION = 24,
JDWP_ERROR_INVALID_FIELDID = 25,
JDWP_ERROR_INVALID_FRAMEID = 30,
JDWP_ERROR_NO_MORE_FRAMES = 31,
JDWP_ERROR_OPAQUE_FRAME = 32,
JDWP_ERROR_NOT_CURRENT_FRAME = 33,
JDWP_ERROR_TYPE_MISMATCH = 34,
JDWP_ERROR_INVALID_SLOT = 35,
JDWP_ERROR_DUPLICATE = 40,
JDWP_ERROR_NOT_FOUND = 41,
JDWP_ERROR_INVALID_MONITOR = 50,
JDWP_ERROR_NOT_MONITOR_OWNER = 51,
JDWP_ERROR_INTERRUPT = 52,
JDWP_ERROR_INVALID_CLASS_FORMAT = 60,
JDWP_ERROR_CIRCULAR_CLASS_DEFINITION = 61,
JDWP_ERROR_FAILS_VERIFICATION = 62,
JDWP_ERROR_ADD_METHOD_NOT_IMPLEMENTED = 63,
JDWP_ERROR_SCHEMA_CHANGE_NOT_IMPLEMENTED = 64,
JDWP_ERROR_INVALID_TYPESTATE = 65,
JDWP_ERROR_HIERARCHY_CHANGE_NOT_IMPLEMENTED = 66,
JDWP_ERROR_DELETE_METHOD_NOT_IMPLEMENTED = 67,
JDWP_ERROR_UNSUPPORTED_VERSION = 68,
JDWP_ERROR_NAMES_DONT_MATCH = 69,
JDWP_ERROR_CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED = 70,
JDWP_ERROR_METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED = 71,
JDWP_ERROR_NOT_IMPLEMENTED = 99,
JDWP_ERROR_NULL_POINTER = 100,
JDWP_ERROR_ABSENT_INFORMATION = 101,
JDWP_ERROR_INVALID_EVENT_TYPE = 102,
JDWP_ERROR_ILLEGAL_ARGUMENT = 103,
JDWP_ERROR_OUT_OF_MEMORY = 110,
JDWP_ERROR_ACCESS_DENIED = 111,
JDWP_ERROR_VM_DEAD = 112,
JDWP_ERROR_INTERNAL = 113,
JDWP_ERROR_UNATTACHED_THREAD = 115,
JDWP_ERROR_INVALID_TAG = 500,
JDWP_ERROR_ALREADY_INVOKING = 502,
JDWP_ERROR_INVALID_INDEX = 503,
JDWP_ERROR_INVALID_LENGTH = 504,
JDWP_ERROR_INVALID_STRING = 506,
JDWP_ERROR_INVALID_CLASS_LOADER = 507,
JDWP_ERROR_INVALID_ARRAY = 508,
JDWP_ERROR_TRANSPORT_LOAD = 509,
JDWP_ERROR_TRANSPORT_INIT = 510,
JDWP_ERROR_NATIVE_METHOD = 511,
JDWP_ERROR_INVALID_COUNT = 512
} jdwpError;
/* EventKind Constants */
typedef enum jdwpEventKind {
JDWP_EVENT_SINGLE_STEP = 1,
JDWP_EVENT_BREAKPOINT = 2,
JDWP_EVENT_FRAME_POP = 3,
JDWP_EVENT_EXCEPTION = 4,
JDWP_EVENT_USER_DEFINED = 5,
JDWP_EVENT_THREAD_START = 6,
JDWP_EVENT_THREAD_END = 7,
JDWP_EVENT_THREAD_DEATH = JDWP_EVENT_THREAD_END,
JDWP_EVENT_CLASS_PREPARE = 8,
JDWP_EVENT_CLASS_UNLOAD = 9,
JDWP_EVENT_CLASS_LOAD = 10,
JDWP_EVENT_FIELD_ACCESS = 20,
JDWP_EVENT_FIELD_MODIFICATION = 21,
JDWP_EVENT_EXCEPTION_CATCH = 30,
JDWP_EVENT_METHOD_ENTRY = 40,
JDWP_EVENT_METHOD_EXIT = 41,
JDWP_EVENT_VM_INIT = 90,
JDWP_EVENT_VM_START = JDWP_EVENT_VM_INIT,
JDWP_EVENT_VM_DEATH = 99,
JDWP_EVENT_VM_DISCONNECTED = 100,
// New EventKind constants for Java 6
JDWP_EVENT_METHOD_EXIT_WITH_RETURN_VALUE = 42,
JDWP_EVENT_MONITOR_CONTENDED_ENTER = 43,
JDWP_EVENT_MONITOR_CONTENDED_ENTERED = 44,
JDWP_EVENT_MONITOR_WAIT = 45,
JDWP_EVENT_MONITOR_WAITED = 46
} jdwpEventKind;
/* EventRequest/ModifierKind Constants */
typedef enum jdwpRequestModifier {
JDWP_MODIFIER_NONE = 0,
JDWP_MODIFIER_COUNT = 1,
JDWP_MODIFIER_CONDITIONAL = 2,
JDWP_MODIFIER_THREAD_ONLY = 3,
JDWP_MODIFIER_CLASS_ONLY = 4,
JDWP_MODIFIER_CLASS_MATCH = 5,
JDWP_MODIFIER_CLASS_EXCLUDE = 6,
JDWP_MODIFIER_LOCATION_ONLY = 7,
JDWP_MODIFIER_EXCEPTION_ONLY = 8,
JDWP_MODIFIER_FIELD_ONLY = 9,
JDWP_MODIFIER_STEP = 10,
JDWP_MODIFIER_INSTANCE_ONLY = 11,
// New ModifierKind constants for Java 6
JDWP_MODIFIER_SOURCE_NAME_MATCH = 12
} jdwpRequestModifier;
/* ThreadStatus Constants */
typedef enum jdwpThreadStatus {
JDWP_THREAD_STATUS_UNKNOWN = -1,
JDWP_THREAD_STATUS_ZOMBIE = 0,
JDWP_THREAD_STATUS_RUNNING = 1,
JDWP_THREAD_STATUS_SLEEPING = 2,
JDWP_THREAD_STATUS_MONITOR = 3,
JDWP_THREAD_STATUS_WAIT = 4,
JDWP_THREAD_STATUS_NOT_STARTED = 5
} jdwpThreadStatus;
/* SuspendStatus Constants */
#define JDWP_SUSPEND_STATUS_SUSPENDED 0x1
/* ClassStatus Constants */
typedef enum jdwpClassStatus {
JDWP_CLASS_STATUS_VERIFIED = 1,
JDWP_CLASS_STATUS_PREPARED = 2,
JDWP_CLASS_STATUS_INITIALIZED = 4,
JDWP_CLASS_STATUS_ERROR = 8
} jdwpClassStatus;
/* TypeTag Constants */
typedef enum jdwpTypeTag {
JDWP_TYPE_TAG_CLASS = 1,
JDWP_TYPE_TAG_INTERFACE = 2,
JDWP_TYPE_TAG_ARRAY = 3
} jdwpTypeTag;
/* Tag Constants */
typedef enum jdwpTag {
JDWP_TAG_NONE = 0,
JDWP_TAG_ARRAY = 91,
JDWP_TAG_BYTE = 66,
JDWP_TAG_CHAR = 67,
JDWP_TAG_OBJECT = 76,
JDWP_TAG_FLOAT = 70,
JDWP_TAG_DOUBLE = 68,
JDWP_TAG_INT = 73,
JDWP_TAG_LONG = 74,
JDWP_TAG_SHORT = 83,
JDWP_TAG_VOID = 86,
JDWP_TAG_BOOLEAN = 90,
JDWP_TAG_STRING = 115,
JDWP_TAG_THREAD = 116,
JDWP_TAG_THREAD_GROUP = 103,
JDWP_TAG_CLASS_LOADER = 108,
JDWP_TAG_CLASS_OBJECT = 99
} jdwpTag;
/* representation of null ObjectID */
#define JDWP_OBJECT_ID_NULL 0
/* StepDepth Constants */
typedef enum jdwpStepDepth {
JDWP_STEP_INTO = 0,
JDWP_STEP_OVER = 1,
JDWP_STEP_OUT = 2
} jdwpStepDepth;
/* StepSize Constants */
typedef enum jdwpStepSize {
JDWP_STEP_MIN = 0,
JDWP_STEP_LINE = 1
} jdwpStepSize;
/* SuspendPolicy Constants */
typedef enum jdwpSuspendPolicy {
JDWP_SUSPEND_NONE = 0,
JDWP_SUSPEND_EVENT_THREAD = 1,
JDWP_SUSPEND_ALL = 2
} jdwpSuspendPolicy;
/* Invoke options constants */
#define JDWP_INVOKE_SINGLE_THREADED 0x01
#define JDWP_INVOKE_NONVIRTUAL 0x02
#endif /* _JDWP_H_ */