1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
Copyright (c) 2003, 2024, Oracle and/or its affiliates. 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.
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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
or visit www.oracle.com if you need additional information or have any
questions.
---------------------------------------------------------------------------------
This directory contains source files of testbase_nsk JVMTI framework,
which provides support for JVMTI tests and accessing JVMTI environment.
Source files:
jvmti_tools.hpp
jvmti_tools.cpp
agent_tools.cpp
Injector.hpp
Injector.cpp
JVMTITools.hpp
JVMTITools.cpp
Naming conventions:
macroses: NSK_JVMTI_*
functions: nsk_jvmti_*
---------------------------------------------------------------------------------
jvmti_tools.hpp
Provides functions and macroses for invocation of JVMTI functions
and checking JVMTI errors:
NSK_JVMTI_VERIFY(call)
NSK_JVMTI_VERIFY_NEGATIVE(call)
NSK_JVMTI_VERIFY_CODE(code, action)
Also provides functions for running JVMTI agent:
- init agent with options:
int nsk_jvmti_parseOptions(const char options[]);
- access agent options
int nsk_jvmti_getWaitTime();
void nsk_jvmti_setWaitTime(int waittime);
const char* nsk_jvmti_findOptionValue(const char name[]);
const char* nsk_jvmti_findOptionStringValue(const char name[], const char* defaultValue);
int nsk_jvmti_findOptionIntValue(const char name[], int defaultValue);
int nsk_jvmti_getOptionsCount();
const char* nsk_jvmti_getOptionName(int i);
const char* nsk_jvmti_getOptionValue(int i);
- create JVMTI environment and register agent thread
jvmtiEnv* nsk_jvmti_createJVMTIEnv(JavaVM* jvm, void* reserved);
int nsk_jvmti_setAgentProc(jvmtiStartFunction proc, const void* arg);
- initialize multiple agent chain via processing of nativeMethodBind event
int nsk_jvmti_init_MA(jvmtiEventCallbacks* callbacks);
- access agent thread environment
jthread nsk_jvmti_getAgentThread();
jvmtiEnv* nsk_jvmti_getAgentJVMTIEnv();
JNIEnv* nsk_jvmti_getAgentJNIEnv();
- synchronize agent with debuggee
int nsk_jvmti_waitForSync(jlong timeout);
int nsk_jvmti_resumeSync();
void nsk_jvmti_sleep(jlong timeout);
- provide proper exit status
void nsk_jvmti_setFailStatus();
int nsk_jvmti_isFailStatus();
jint nsk_jvmti_getStatus();
- use locations and breakpoints
int nsk_jvmti_addLocationCapabilities();
int nsk_jvmti_addBreakpointCapabilities();
jlocation nsk_jvmti_getLineLocation(jclass cls, jmethodID method, int line);
jlocation nsk_jvmti_setLineBreakpoint(jclass cls, jmethodID method, int line);
jlocation nsk_jvmti_clearLineBreakpoint(jclass cls, jmethodID method, int line);
- find classes and threads
jclass nsk_jvmti_classBySignature(const char signature[]);
jthread nsk_jvmti_threadByName(const char name[]);
- events management
int nsk_jvmti_isOptionalEvent(jvmtiEvent event);
int nsk_jvmti_enableEvents(jvmtiEventMode enable, int size,
jvmtiEvent list[], jthread thread);
void nsk_jvmti_showPossessedCapabilities(jvmtiEnv *jvmti);
---------------------------------------------------------------------------------
Typical example of usage of the NSK_JVMTI_VERIFY macro
for invocation of JVMTI functions:
// jvmti->GetVersion(jvmti, &version)
if (!NSK_JVMTI_VERIFY(jvmti->GetVersion(&version) != NULL)) {
return JNI_ERR;
}
or with saving error code:
// err = jvmti->GetVersion(jvmti, &version)
if (!NSK_JVMTI_VERIFY(err = jvmti->GetVersion(&version))) {
return err;
}
functions: nsk_jvmti_*
---------------------------------------------------------------------------------
JVMTITools.hpp
Provides set of functions which convert JVMTI binary data to
a null-terminated character string:
const char* TranslateEvent(jvmtiEvent event_type);
const char* TranslateState(jint flags);
const char* TranslateError(jvmtiError err);
const char* TranslatePhase(jvmtiPhase phase);
const char* TranslateRootKind(jvmtiHeapRootKind root);
const char* TranslateObjectRefKind(jvmtiObjectReferenceKind ref);
---------------------------------------------------------------------------------
Injector.hpp
Provides class file format constants and the function which inject some
profiling bytecodes into Java class files:
int Inject(const u1* old_bytes, const jint old_length,
u1** new_bytes, jint* new_length, int bci_mode);
---------------------------------------------------------------------------------
|