📄 jvmdi.h
字号:
/* * @(#)jvmdi.h 1.44 01/12/03 * * Copyright 2002 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. *//* * Java Virtual Machine Debug Interface * * Defines debugging functionality that a VM should provide. * * Should not overlap functionality in jni.h */#ifndef _JAVASOFT_JVMDI_H_#define _JAVASOFT_JVMDI_H_#include "jni.h"#define JVMDI_VERSION_1 0x20010000#define JVMDI_VERSION_1_1 0x20010001#define JVMDI_VERSION_1_2 0x20010002#ifdef __cplusplusextern "C" {#endiftypedef jobject jthread;typedef jobject jthreadGroup;struct _jframeID;typedef struct _jframeID *jframeID; /* specifies program location "pc" - often byte code index */typedef jlong jlocation; /* The jmethodID for methods that have been replaced */ /* via RedefineClasses - used when the implementation */ /* does not wish to retain replaced jmethodIDs */#define OBSOLETE_METHOD_ID ((jmethodID)(NULL)) /* * Errors */typedef jint jvmdiError; /* no error */#define JVMDI_ERROR_NONE ((jvmdiError)0) /* * Errors on thread operations */ /* invalid thread */#define JVMDI_ERROR_INVALID_THREAD ((jvmdiError)10) /* invalid thread group */#define JVMDI_ERROR_INVALID_THREAD_GROUP ((jvmdiError)11) /* invalid thread priority */#define JVMDI_ERROR_INVALID_PRIORITY ((jvmdiError)12) /* thread not suspended */#define JVMDI_ERROR_THREAD_NOT_SUSPENDED ((jvmdiError)13) /* thread already suspended */#define JVMDI_ERROR_THREAD_SUSPENDED ((jvmdiError)14) /* * Errors on object and class operations */ /* invalid object (implementation not required to gracefully catch) */#define JVMDI_ERROR_INVALID_OBJECT ((jvmdiError)20) /* invalid class (implementation not required to gracefully catch) */#define JVMDI_ERROR_INVALID_CLASS ((jvmdiError)21) /* class not prepared */#define JVMDI_ERROR_CLASS_NOT_PREPARED ((jvmdiError)22) /* invalid methodID (implementation not required to gracefully catch) */#define JVMDI_ERROR_INVALID_METHODID ((jvmdiError)23) /* invalid location */#define JVMDI_ERROR_INVALID_LOCATION ((jvmdiError)24) /* invalid fieldID (implementation not required to gracefully catch) */#define JVMDI_ERROR_INVALID_FIELDID ((jvmdiError)25) /* * Errors on frame operations */ /* invalid frameID (implementation not required to gracefully catch) */#define JVMDI_ERROR_INVALID_FRAMEID ((jvmdiError)30) /* there are no more frames on the stack */#define JVMDI_ERROR_NO_MORE_FRAMES ((jvmdiError)31) /* operation cannot be performed on this frame */#define JVMDI_ERROR_OPAQUE_FRAME ((jvmdiError)32) /* operation can only be performed on current frame */#define JVMDI_ERROR_NOT_CURRENT_FRAME ((jvmdiError)33) /* type mismatch (implementation not required to gracefully catch) */#define JVMDI_ERROR_TYPE_MISMATCH ((jvmdiError)34) /* invalid slot */#define JVMDI_ERROR_INVALID_SLOT ((jvmdiError)35) /* * Errors on set/clear/find operations */ /* item already present */#define JVMDI_ERROR_DUPLICATE ((jvmdiError)40) /* item not found */#define JVMDI_ERROR_NOT_FOUND ((jvmdiError)41) /* * Errors on monitor operations */ /* invalid monitor */#define JVMDI_ERROR_INVALID_MONITOR ((jvmdiError)50) /* wait, notify, notify all tried without entering monitor */#define JVMDI_ERROR_NOT_MONITOR_OWNER ((jvmdiError)51) /* waiting thread interrupted */#define JVMDI_ERROR_INTERRUPT ((jvmdiError)52) /* * Class redefinition / operand stack errors */ /* The equivalent of ClassFormatError */#define JVMDI_ERROR_INVALID_CLASS_FORMAT ((jvmdiError)60) /* The equivalent of ClassCircularityError */#define JVMDI_ERROR_CIRCULAR_CLASS_DEFINITION ((jvmdiError)61) /* The class bytes fail verification */#define JVMDI_ERROR_FAILS_VERIFICATION ((jvmdiError)62) /* The new class version adds new methods */ /* and can_add_method is false */#define JVMDI_ERROR_ADD_METHOD_NOT_IMPLEMENTED ((jvmdiError)63) /* The new class version changes fields */ /* and can_unrestrictedly_redefine_classes is false */#define JVMDI_ERROR_SCHEMA_CHANGE_NOT_IMPLEMENTED ((jvmdiError)64) /* bci/operand stack/local var combination is not verifiably */ /* type safe */#define JVMDI_ERROR_INVALID_TYPESTATE ((jvmdiError)65) /* A direct superclass is different for the new class */ /* version, or the set of directly implemented */ /* interfaces is different */ /* and can_unrestrictedly_redefine_classes is false */#define JVMDI_ERROR_HIERARCHY_CHANGE_NOT_IMPLEMENTED ((jvmdiError)66) /* The new class version does not declare a method */ /* declared in the old class version */ /* and can_unrestrictedly_redefine_classes is false */#define JVMDI_ERROR_DELETE_METHOD_NOT_IMPLEMENTED ((jvmdiError)67) /* A class file has a version number not supported */ /* by this VM. */#define JVMDI_ERROR_UNSUPPORTED_VERSION ((jvmdiError)68) /* The class name defined in the new class file is */ /* different from the name in the old class object */#define JVMDI_ERROR_NAMES_DONT_MATCH ((jvmdiError)69) /* The new class version has different modifiers and */ /* can_unrestrictedly_redefine_classes is false */#define JVMDI_ERROR_CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED ((jvmdiError)70) /* A method in the new class version has different modifiers */ /* than its counterpart in the old class version */ /* and can_unrestrictedly_redefine_classes is false */#define JVMDI_ERROR_METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED ((jvmdiError)71) /* * Miscellaneous errors */ /* Not yet implemented */#define JVMDI_ERROR_NOT_IMPLEMENTED ((jvmdiError)99) /* null pointer */#define JVMDI_ERROR_NULL_POINTER ((jvmdiError)100) /* information is absent */#define JVMDI_ERROR_ABSENT_INFORMATION ((jvmdiError)101) /* invalid event type */#define JVMDI_ERROR_INVALID_EVENT_TYPE ((jvmdiError)102) /* invalid argument */#define JVMDI_ERROR_ILLEGAL_ARGUMENT ((jvmdiError)103) /* * Universal errors. These errors may be returned by * any JVMDI function, not just the ones for which they are listed * below. */ /* no more memory available for allocation */#define JVMDI_ERROR_OUT_OF_MEMORY ((jvmdiError)110) /* debugging has not been enabled in this VM */#define JVMDI_ERROR_ACCESS_DENIED ((jvmdiError)111) /* VM is dead (implementation not required to gracefully catch) */#define JVMDI_ERROR_VM_DEAD ((jvmdiError)112) /* internal error */#define JVMDI_ERROR_INTERNAL ((jvmdiError)113) /* Thread calling JVMDI function not attached to VM */#define JVMDI_ERROR_UNATTACHED_THREAD ((jvmdiError)115) /* * Threads */ /* Thread status is unknown */#define JVMDI_THREAD_STATUS_UNKNOWN ((jint)-1) /* Thread is waiting to die */#define JVMDI_THREAD_STATUS_ZOMBIE ((jint)0) /* Thread is runnable */#define JVMDI_THREAD_STATUS_RUNNING ((jint)1) /* Thread is sleeping - Thread.sleep() or JVM_Sleep() was called */#define JVMDI_THREAD_STATUS_SLEEPING ((jint)2) /* Thread is waiting on a java monitor */#define JVMDI_THREAD_STATUS_MONITOR ((jint)3) /* Thread is waiting - Thread.wait() or JVM_MonitorWait() was called */#define JVMDI_THREAD_STATUS_WAIT ((jint)4) /* Thread is suspended - Thread.suspend(), JVM_Suspend() or * JVMDI_Suspend was called */#define JVMDI_SUSPEND_STATUS_SUSPENDED ((jint)0x1) /* Thread is at a breakpoint */#define JVMDI_SUSPEND_STATUS_BREAK ((jint)0x2) /* Thread priority constants */#define JVMDI_THREAD_MIN_PRIORITY ((jint)1)#define JVMDI_THREAD_NORM_PRIORITY ((jint)5)#define JVMDI_THREAD_MAX_PRIORITY ((jint)10)typedef struct { char *name; jint priority; jboolean is_daemon; jthreadGroup thread_group; jobject context_class_loader;} JVMDI_thread_info;typedef struct { jthreadGroup parent; char *name; jint max_priority; jboolean is_daemon;} JVMDI_thread_group_info;#define JVMDI_DISABLE ((jint) 0)#define JVMDI_ENABLE ((jint) 1)/* * Initial function for debug threads created through JVMDI */typedef void (*JVMDI_StartFunction)(void *);/* * Type for debug monitors created through JVMDI */typedef void *JVMDI_RawMonitor;#define JVMDI_MONITOR_WAIT_FOREVER ((jlong)(-1))/* * Monitor information */typedef struct { jthread owner; jint entry_count; jint waiter_count; jthread *waiters;} JVMDI_monitor_info;typedef struct { jint owned_monitor_count; jobject *owned_monitors;} JVMDI_owned_monitor_info; /* * Events */ /* kind = JVMDI_EVENT_SINGLE_STEP */ typedef struct { jthread thread; jclass clazz; jmethodID method; jlocation location; } JVMDI_single_step_event_data; /* kind = JVMDI_EVENT_BREAKPOINT */ typedef struct { jthread thread; jclass clazz; jmethodID method; jlocation location; } JVMDI_breakpoint_event_data; /* kind = JVMDI_EVENT_FIELD_ACCESS */ typedef struct { jthread thread; jclass clazz; jmethodID method; jlocation location; jclass field_clazz; jobject object; jfieldID field; } JVMDI_field_access_event_data; /* kind = JVMDI_EVENT_FIELD_MODIFICATION */ typedef struct { jthread thread; jclass clazz; jmethodID method; jlocation location; jclass field_clazz; jobject object; jfieldID field; char signature_type; jvalue new_value; } JVMDI_field_modification_event_data; /* kind = JVMDI_EVENT_FRAME_POP */ /* kind = JVMDI_EVENT_METHOD_ENTRY */ /* kind = JVMDI_EVENT_METHOD_EXIT */ typedef struct { jthread thread; jclass clazz; jmethodID method; jframeID frame; } JVMDI_frame_event_data; /* kind = JVMDI_EVENT_EXCEPTION */ typedef struct { jthread thread; jclass clazz; jmethodID method; jlocation location; jobject exception; jclass catch_clazz; jmethodID catch_method; jlocation catch_location; } JVMDI_exception_event_data;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -