/* * Copyright (c) 2007, 2017, 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.
*/
class GetSetLocalTarg { publicstaticvoid main(String[] args){ int intVar = 10;
System.out.println("GetSetLocalTarg: Started");
intVar = staticMeth(intVar);
System.out.println("GetSetLocalTarg: Finished");
}
/* * The line numbers of this method *MUST NOT* be changed * because the testing algorithm counts on this layout! * It's in calls to resumeTo("GetSetLocalTarg", line).
*/ publicstaticint staticMeth(int intArg) {
System.out.println("staticMeth: Started"); int result;
{
{ boolean bool_1 = false;
intArg++; // START_LINE
}
Object obj_2 = new Object();
intArg++; // STOP_LINE. Last stop is at this point. // Only obj_2 and intArg are valid // Note: even result is not valid here!
}
result = 10; // <- This is first init of result var
System.out.println("staticMeth: Finished"); return result;
}
}
List printAllVariables(String className, String methodName) throws Exception {
println("printAllVariables for method: " + className + "." + methodName);
Method method = getMethod(className, methodName);
List localVars; try {
localVars = method.variables();
println(" Success: got a list of all method variables: " + methodName);
} catch (com.sun.jdi.AbsentInformationException ex) {
failure(" Failure: AbsentInformationException has been thrown"); returnnull;
}
int index = 0; for (Iterator it = localVars.iterator(); it.hasNext();) {
LocalVariable lv = (LocalVariable) it.next();
printOneVariable(lv, index++);
}
println(""); return localVars;
}
void checkGetSetAllVariables(List localVars, StackFrame frame) throws Exception {
println("\n checkGetSetAllVariables for method at particular frame location: "); int index = 0; for (Iterator it = localVars.iterator(); it.hasNext();) {
LocalVariable lv = (LocalVariable) it.next();
String lv_name = lv.name();
print(" Variable " + lv_name); try {
Value val = frame.getValue(lv);
frame.setValue(lv, val);
println(" has been get/set"); if (lv_name.compareTo("intArg") != 0 &&
lv_name.compareTo("obj_2") != 0) {
failure(" Failure: AbsentInformationException is expected");
}
} catch (java.lang.IllegalArgumentException ex) {
println(" is not valid"); if (lv_name.compareTo("intArg") == 0 &&
lv_name.compareTo("obj_2") == 0) {
failure(" Failure: AbsentInformationException was not expected");
}
}
}
println("");
}
void printOneVariable(LocalVariable lv, int index) throws Exception {
String tyname = lv.typeName();
println("");
println(" Var name: " + lv.name());
println(" Var type: " + tyname);
println(" Var index: " + index);
println(" Signature: " + lv.type().signature()); // Sorry, there is no way to get (and print) // a local variable slot numbers using JDI!
}
void printFrameVariables(StackFrame frame) throws Exception { int index = 0;
List localVars = frame.visibleVariables();
println("\n Visible variables at this point are: ");
for (Iterator it = localVars.iterator(); it.hasNext();) {
LocalVariable lv = (LocalVariable) it.next();
printOneVariable(lv, index++);
println(" Var value: " + frame.getValue(lv));
}
}
void checkSetBooleanTypes(StackFrame frame, LocalVariable lv) throws Exception {
BooleanValue get = (BooleanValue) frame.getValue(lv);
BooleanValue set = incrValue(get);
frame.setValue(lv, set);
// To get the new value which has been set
get = (BooleanValue) frame.getValue(lv);
println(" Var Set: " + set);
println(" Var Get: " + get);
println(""); boolean v1 = get.value(); boolean v2 = set.value();
// Check if set was done properly if (v1 == v2) {
println(" Success: Value was set correctly!");
} else {
failure(" Failure: Value was NOT set correctly!");
}
println("");
}
void checkSetByteTypes(StackFrame frame, LocalVariable lv) throws Exception {
ByteValue get = (ByteValue) frame.getValue(lv);
ByteValue set = incrValue(get);
frame.setValue(lv, set);
// To get the new value which has been set
get = (ByteValue) frame.getValue(lv);
println(" Var Set: " + set);
println(" Var Get: " + get);
println(""); byte v1 = get.value(); byte v2 = set.value();
// Check if set was done properly if (v1 == v2) {
println(" Success: Value was set correctly!");
} else {
failure(" Failure: Value was NOT set correctly!");
}
println("");
}
void checkSetCharTypes(StackFrame frame, LocalVariable lv) throws Exception {
CharValue get = (CharValue) frame.getValue(lv);
CharValue set = incrValue(get);
frame.setValue(lv, set);
// To get the new value which has been set
get = (CharValue) frame.getValue(lv);
println(" Var Set: " + set);
println(" Var Get: " + get);
println(""); char v1 = get.value(); char v2 = set.value();
// Check if set was done properly if (v1 == v2) {
println(" Success: Value was set correctly!");
} else {
failure(" Failure: Value was NOT set correctly!");
}
println("");
}
void checkSetShortTypes(StackFrame frame, LocalVariable lv) throws Exception {
ShortValue get = (ShortValue) frame.getValue(lv);
ShortValue set = incrValue(get);
frame.setValue(lv, set);
// To get the new value which has been set
get = (ShortValue) frame.getValue(lv);
println(" Var Set: " + set);
println(" Var Get: " + get);
println(""); short v1 = get.value(); short v2 = set.value();
// Check if set was done properly if (v1 == v2) {
println(" Success: Value was set correctly!");
} else {
failure(" Failure: Value was NOT set correctly!");
}
println("");
}
void checkSetIntegerTypes(StackFrame frame, LocalVariable lv) throws Exception {
IntegerValue get = (IntegerValue) frame.getValue(lv);
IntegerValue set = incrValue(get);
frame.setValue(lv, set);
// To get the new value which has been set
get = (IntegerValue) frame.getValue(lv);
println(" Var Set: " + set);
println(" Var Get: " + get);
println(""); int v1 = get.value(); int v2 = set.value();
// Check if set was done properly if (v1 == v2) {
println(" Success: Value was set correctly!");
} else {
failure(" Failure: Value was NOT set correctly!");
}
println("");
}
void checkSetLongTypes(StackFrame frame, LocalVariable lv) throws Exception {
LongValue get = (LongValue) frame.getValue(lv);
LongValue set = incrValue(get);
frame.setValue(lv, set);
// To get the new value which has been set
get = (LongValue) frame.getValue(lv);
println(" Var Set: " + set);
println(" Var Get: " + get);
println(""); long v1 = get.value(); long v2 = set.value();
// Check if set was done properly if (v1 == v2) {
println(" Success: Value was set correctly!");
} else {
failure(" Failure: Value was NOT set correctly!");
}
println("");
}
void checkSetFloatTypes(StackFrame frame, LocalVariable lv) throws Exception {
FloatValue get = (FloatValue) frame.getValue(lv);
FloatValue set = incrValue(get);
frame.setValue(lv, set);
// To get the new value which has been set
get = (FloatValue) frame.getValue(lv);
println(" Var Set: " + set);
println(" Var Get: " + get);
println(""); float v1 = get.value(); float v2 = set.value();
// Check if set was done properly if (v1 == v2) {
println(" Success: Value was set correctly!");
} else {
failure(" Failure: Value was NOT set correctly!");
}
println("");
}
void checkSetDoubleTypes(StackFrame frame, LocalVariable lv) throws Exception {
DoubleValue get = (DoubleValue) frame.getValue(lv);
DoubleValue set = incrValue(get);
frame.setValue(lv, set);
// To get the new value which has been set
get = (DoubleValue) frame.getValue(lv);
println(" Var Set: " + set);
println(" Var Get: " + get);
println(""); double v1 = get.value(); double v2 = set.value();
// Check if set was done properly if (v1 == v2) {
println(" Success: Value was set correctly!");
} else {
failure(" Failure: Value was NOT set correctly!");
}
println("");
}
void checkSetStringTypes(StackFrame frame, LocalVariable lv) throws Exception {
StringReference get = (StringReference) frame.getValue(lv);
StringReference set = incrValue((StringReference) frame.getValue(lv));
frame.setValue(lv, set);
// To get the new value which has been set
get = (StringReference) frame.getValue(lv);
println(" Var Set: " + set);
println(" Var Get: " + get);
println("");
String str1 = get.value();
String str2 = set.value();
// Check if set was done properly if (str1.compareTo(str2) == 0) {
println(" Success: String was set correctly!");
} else {
failure(" Failure: String was NOT set correctly!");
}
println("");
}
void checkSetObjectTypes(StackFrame frame, LocalVariable lv) throws Exception {
ObjectReference get = (ObjectReference) frame.getValue(lv);
ObjectReference set = get; // FIXME: Don't know how to create a mirror of Object
frame.setValue(lv, set);
// To get the new value which has been set
get = (ObjectReference) frame.getValue(lv);
println(" Var Set: " + set);
println(" Var Get: " + get);
println("");
if (set.uniqueID() == get.uniqueID()) {
println(" Success: Object was set correctly!");
} else {
failure(" Failure: Object was NOT set correctly!");
}
println("");
}
void negativeIntegerCheck(StackFrame frame, LocalVariable lv) throws Exception { try {
IntegerValue get = (IntegerValue) frame.getValue(lv);
println(" Get: No ClassCastException error!");
} catch(java.lang.ClassCastException ex) {
println(" Success: Get: ClassCastException error has cought as expected!");
} try {
IntegerValue set = vm().mirrorOf((int) 0x3F);
frame.setValue(lv, set);
println(" Set: No InvalidTypeException with Integer error!");
} catch(com.sun.jdi.InvalidTypeException ex) {
println(" Success: Set: InvalidTypeException with Integer error has cought as expected!");
}
}
void negativeFloatCheck(StackFrame frame, LocalVariable lv) throws Exception { try {
FloatValue get = (FloatValue) frame.getValue(lv);
println(" Get: No ClassCastException error!");
} catch(java.lang.ClassCastException ex) {
println(" Success: Get: ClassCastException with Float error has cought as expected!");
} try {
FloatValue set = vm().mirrorOf(1.2345f);
frame.setValue(lv, set);
println(" Set: No InvalidTypeException with Float error!");
} catch(com.sun.jdi.InvalidTypeException ex) {
println(" Success: Set: InvalidTypeException error has cought as expected!");
}
}
void negativeDoubleCheck(StackFrame frame, LocalVariable lv) throws Exception { try {
DoubleValue get = (DoubleValue) frame.getValue(lv);
println(" Get: No ClassCastException error!");
} catch(java.lang.ClassCastException ex) {
println(" Success: Get: ClassCastException with Double error has cought as expected!");
} try {
DoubleValue set = vm().mirrorOf(1.2345E02);
frame.setValue(lv, set);
println(" Set: No InvalidTypeException with Double error!");
} catch(com.sun.jdi.InvalidTypeException ex) {
println(" Success: Set: InvalidTypeException error has cought as expected!");
}
}
void checkSetFrameVariables(StackFrame frame) throws Exception {
List localVars = frame.visibleVariables(); int index = 0;
println("\n Set variable values:");
for (Iterator it = localVars.iterator(); it.hasNext();index++) {
LocalVariable lv = (LocalVariable) it.next();
String signature = lv.type().signature();
switch (signature.charAt(0)) { case'Z': // Boolean Type
checkSetBooleanTypes(frame, lv);
negativeIntegerCheck(frame, lv);
negativeFloatCheck(frame, lv);
negativeDoubleCheck(frame, lv); break; case'B': // Byte Type
checkSetByteTypes(frame, lv);
negativeIntegerCheck(frame, lv);
negativeFloatCheck(frame, lv);
negativeDoubleCheck(frame, lv); break; case'C': // Char Type
checkSetCharTypes(frame, lv);
negativeIntegerCheck(frame, lv);
negativeFloatCheck(frame, lv);
negativeDoubleCheck(frame, lv); break; case'S': // Short Type
checkSetShortTypes(frame, lv);
negativeIntegerCheck(frame, lv);
negativeFloatCheck(frame, lv);
negativeDoubleCheck(frame, lv); break; case'I': // Integer Type
checkSetIntegerTypes(frame, lv); if (index > 0) { // To skip integer method parameter
negativeFloatCheck(frame, lv);
negativeDoubleCheck(frame, lv);
} break; case'J': // Long Type
checkSetLongTypes(frame, lv);
negativeIntegerCheck(frame, lv);
negativeFloatCheck(frame, lv);
negativeDoubleCheck(frame, lv); break; case'F': // Float Type
checkSetFloatTypes(frame, lv);
negativeIntegerCheck(frame, lv);
negativeDoubleCheck(frame, lv); break; case'D': // Double Type
checkSetDoubleTypes(frame, lv);
negativeIntegerCheck(frame, lv);
negativeFloatCheck(frame, lv); break; case'L': if (signature.compareTo("Ljava/lang/String;") == 0) {
checkSetStringTypes(frame, lv);
negativeIntegerCheck(frame, lv);
negativeFloatCheck(frame, lv);
} if (signature.compareTo("Ljava/lang/Object;") == 0) {
checkSetObjectTypes(frame, lv);
negativeIntegerCheck(frame, lv);
negativeFloatCheck(frame, lv);
} break; default:
printOneVariable(lv, index);
failure(" Failure: List of local variables has a wrong entry!");
};
}
}
/********** test core **********/
protectedvoid runTests() throws Exception {
/* * Get to the top of main() to determine targetClass and mainThread
*/
BreakpointEvent bpe = startToMain("GetSetLocalTarg");
println("startToMain(GetSetLocalTarg)");
List localVars = printAllVariables("GetSetLocalTarg", "staticMeth");
for (int line = START_LINE; line <= STOP_LINE; line += 4) {
println("\n resumeTo(GetSetLocalTarg, " + line + ")");
bpe = resumeTo("GetSetLocalTarg", line);
frame = bpe.thread().frame(0);
printFrameVariables(frame);
checkSetFrameVariables(frame);
} // Check if we can Get/Set all local vars using last frame state
checkGetSetAllVariables(localVars, frame);
/* * resume until the end
*/
listenUntilVMDisconnect();
/* * deal with results of test * if anything has called failure("foo") testFailed will be true
*/ if (!testFailed) {
println("GetSetLocalTest: passed");
} else { thrownew Exception("GetSetLocalTest: failed");
}
}
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.14Bemerkung:
(vorverarbeitet am 2026-06-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
hier können Sie eine Nachricht absetzen
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.