/*
* 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 .
*/
// THIS TEST IS LINE NUMBER SENSITIVE
/**
* @ test
* @ bug 4359312 4450091
* @ summary Test PTR 1421 JVM exceptions making a call to LocalVariable . type ( ) . name ( )
* @ author Tim Bell ( based on the PTR 1421 report submitted by IBM ) .
*
* @ run build TestScaffold VMConnection TargetListener TargetAdapter
* @ run compile - g GetLocalVariables . java
* @ run driver GetLocalVariables
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
import com.sun.jdi.request.*;
import java.util.*;
/********** target program **********/
class GetLocalVariablesTarg {
private static char s_char1 = 'a' ;
private static char s_char2 = (char ) 0 ;
private static char s_char3 = (char ) 1 ;
private static char s_char4 = (char ) 32 ;
private static char s_char5 = '\u7ffe' ;
private static char s_char6 = '\u7fff' ;
private static char s_char7 = '\u8000' ;
private static char s_char8 = '\u8001' ;
private static char s_char9 = '\ufffe' ;
private static char s_char10 = '\uffff' ;
private static byte s_byte1 = (byte ) 146 ;
private static byte s_byte2 = (byte ) 0 ;
private static byte s_byte3 = (byte ) 1 ;
private static byte s_byte4 = (byte ) 15 ;
private static byte s_byte5 = (byte ) 127 ;
private static byte s_byte6 = (byte ) 128 ;
private static byte s_byte7 = (byte ) - 1 ;
private static byte s_byte8 = (byte ) - 15 ;
private static byte s_byte9 = (byte ) - 127 ;
private static byte s_byte10 = (byte ) - 128 ;
private static short s_short1 = (short ) 28123 ;
private static short s_short2 = (short ) 0 ;
private static short s_short3 = (short ) 1 ;
private static short s_short4 = (short ) 15 ;
private static short s_short5 = (short ) 0 x7ffe;
private static short s_short6 = (short ) 0 x7fff;
private static short s_short7 = (short ) -1 ;
private static short s_short8 = (short ) -15 ;
private static short s_short9 = (short ) -0 x7ffe;
private static short s_short10 = (short ) -0 x7fff;
private static int s_int1 = 3101246 ;
private static int s_int2 = 0 ;
private static int s_int3 = 1 ;
private static int s_int4 = 15 ;
private static int s_int5 = 0 x7ffffffe;
private static int s_int6 = 0 x7fffffff;
private static int s_int7 = -1 ;
private static int s_int8 = -15 ;
private static int s_int9 = -0 x7ffffffe;
private static int s_int10 = -0 x7fffffff;
private static long s_long1 = 0 x0123456789ABCDEFL;
private static long s_long2 = 0 ;
private static long s_long3 = 1 ;
private static long s_long4 = 15 ;
private static long s_long5 = 0 x000000007fffffffL;
private static long s_long6 = 0 x0000000080000000L;
private static long s_long7 = 0 x0000000100000000L;
private static long s_long8 = 0 x7fffffffffffffffL;
private static long s_long9 = 0 x8000000000000000L;
private static long s_long10 = -15 ;
private static float s_float1 = 2 .3145 f;
private static float s_float2 = 0 f;
private static double s_double1 = 1 .469 d;
private static double s_double2 = 0 ;
private static int s_iarray1[] = {1 , 2 , 3 };
private static int s_iarray2[] = null ;
private static int s_marray1[][] = {{1 , 2 , 3 }, {3 , 4 , 5 }, null , {6 , 7 }};
private static int s_marray2[][] = null ;
private static String s_sarray1[] = {"abc" , null , "def" , "ghi" };
private static String s_sarray2[] = null ;
private static Object s_sarray3[] = s_sarray1;
private static String s_string1 = "abcdef" ;
private static String s_string2 = null ;
private static String s_string3 = "a\u1234b\u7777" ;
private char i_char;
private byte i_byte;
private short i_short;
private int i_int;
private long i_long;
private float i_float;
private double i_double;
private int i_iarray[];
private int i_marray[][];
private String i_string;
public GetLocalVariablesTarg()
{
int index;
i_char = 'B' ;
i_byte = 120 ;
i_short = 12048 ;
i_int = 0 x192842;
i_long = 123591230941 L;
i_float = 235 .15 e5f;
i_double = 176 e-1 d;
i_iarray = new int [5 ];
i_marray = new int [7 ][];
i_string = "empty" ;
for (index = 0 ; index < i_iarray.length; ++index)
i_iarray[index] = index + 1 ;
i_marray[0 ] = new int [2 ];
i_marray[1 ] = new int [4 ];
i_marray[2 ] = null ;
i_marray[3 ] = new int [1 ];
i_marray[4 ] = new int [3 ];
i_marray[5 ] = null ;
i_marray[6 ] = new int [7 ];
for (index = 0 ; index < i_marray.length; ++index)
if (i_marray[index] != null )
for (int index2 = 0 ; index2 < i_marray[index].length; ++index2)
i_marray[index][index2] = index + index2;
}
public GetLocalVariablesTarg(char p_char, byte p_byte, short p_short,
int p_int, long p_long, float p_float,
double p_double, int p_iarray[], int p_marray[][],
String p_string)
{
i_char = p_char;
i_byte = p_byte;
i_short = p_short;
i_int = p_int;
i_long = p_long;
i_float = p_float;
i_double = p_double;
i_iarray = p_iarray;
i_marray = p_marray;
i_string = p_string;
}
public static void test_expressions()
{
GetLocalVariablesTarg e1 = new GetLocalVariablesTarg();
GetLocalVariablesTarg e2 = null ;
GetLocalVariablesTarg e3 = e1;
GetLocalVariablesTarg e4 = new GetLocalVariablesTarg(s_char1, s_byte1, s_short1, s_int1,
s_long1, s_float1, s_double1,
s_iarray1, s_marray1, "e4" );
GetLocalVariablesTarg e5 = new GetLocalVariablesTarg(s_char2, s_byte2, s_short2, s_int2,
s_long2, s_float2, s_double2,
s_iarray2, s_marray2, "e5" );
char l_char = (char ) (
s_char1 + s_char2 + s_char3 + s_char4 + s_char5 +
s_char6 + s_char7 + s_char8 + s_char9 + s_char10);
byte l_byte = (byte ) (
s_byte1 + s_byte2 + s_byte3 + s_byte4 + s_byte5 +
s_byte6 + s_byte7 + s_byte8 + s_byte9 + s_byte10);
short l_short = (short ) (
s_short1 + s_short2 + s_short3 + s_short4 + s_short5 +
s_short6 + s_short7 + s_short8 + s_short9 + s_short10);
int l_int = s_int1 + s_int2 + s_int3 + s_int4 + s_int5 +
s_int6 + s_int7 + s_int8 + s_int9 + s_int10;
long l_long = s_long1 + s_long2 + s_long3 + s_long4 + s_long5 +
s_long6 + s_long7 + s_long8 + s_long9 + s_long10;
float l_float = s_float1 + s_float2;
double l_double = s_double1 + s_double2;
int [] l_iarray = null ;
int [][] l_marray = null ;
String l_string = s_string1 + s_string3 + s_sarray1[0 ];
if (s_sarray2 == null )
l_string += "?" ;
if (s_sarray3 instanceof String[])
l_string += "<io>" ;
Object e6 = new GetLocalVariablesTarg(l_char, l_byte, l_short, l_int,
l_long, l_float, l_double, l_iarray,
l_marray, l_string);
e1.test_1(); // RESUME_TO_LINE
e3.test_1();
e4.test_1();
e5.test_1();
((GetLocalVariablesTarg) e6).test_1();
e3 = null ;
if (e3 == e1)
e3.test_1();
e3 = e4;
if (e3 == e2)
e3 = e5;
e3.test_1();
}
public void test_1()
{
double l_add = i_double + i_short;
long l_subtract = i_long - i_int;
long l_multiply = i_byte * i_int;
i_double = l_add + i_float;
i_short = (short ) l_subtract;
i_long = l_multiply + i_byte + i_short;
}
public static void main(String[] args) {
System.out.println("Howdy!" );
test_expressions();
System.out.println("Goodbye from GetLocalVariablesTarg!" );
}
}
/********** test program **********/
public class GetLocalVariables extends TestScaffold {
static final int RESUME_TO_LINE = 222 ;
ReferenceType targetClass;
ThreadReference mainThread;
GetLocalVariables (String args[]) {
super (args);
}
public static void main(String[] args)
throws Exception
{
new GetLocalVariables (args).startTests();
}
/********** test core **********/
protected void runTests()
throws Exception
{
/*
* Get to the top of main ( ) to determine targetClass and mainThread
*/
BreakpointEvent bpe = startToMain("GetLocalVariablesTarg" );
targetClass = bpe.location().declaringType();
mainThread = bpe.thread ();
EventRequestManager erm = vm().eventRequestManager();
bpe = resumeTo("GetLocalVariablesTarg" , RESUME_TO_LINE);
/*
* We ' ve arrived . Look around at some variables .
*/
StackFrame frame = bpe.thread ().frame(0 );
List localVars = frame.visibleVariables();
System.out.println(" Visible variables at this point are: " );
for (Iterator it = localVars.iterator(); it.hasNext();) {
LocalVariable lv = (LocalVariable) it.next();
System.out.print(lv.name());
System.out.print(" typeName: " );
System.out.print(lv.typeName());
System.out.print(" signature: " );
System.out.print(lv.type().signature());
System.out.print(" primitive type: " );
System.out.println(lv.type().name());
}
/*
* resume the target listening for events
*/
listenUntilVMDisconnect();
/*
* deal with results of test if anything has called failure ( " foo " )
* testFailed will be true
*/
if (!testFailed) {
println("GetLocalVariables: passed" );
} else {
throw new Exception("GetLocalVariables: failed" );
}
}
}
Messung V0.5 in Prozent C=88 H=92 G=89
¤ Dauer der Verarbeitung: 0.4 Sekunden
¤
*© Formatika GbR, Deutschland