8210760: [TEST] rewrite com/sun/jdi shell tests to java version - step4
Reviewed-by: jcbeyler, sspitsyn, cjplummer
This commit is contained in:
parent
b0a7fa474f
commit
450675ba81
@ -836,8 +836,6 @@ tools/pack200/CommandLineTests.java 8059906 generic-
|
|||||||
|
|
||||||
com/sun/jdi/BasicJDWPConnectionTest.java 8195703 generic-all
|
com/sun/jdi/BasicJDWPConnectionTest.java 8195703 generic-all
|
||||||
|
|
||||||
com/sun/jdi/RedefineImplementor.sh 8004127 generic-all
|
|
||||||
|
|
||||||
com/sun/jdi/RepStep.java 8043571 generic-all
|
com/sun/jdi/RepStep.java 8043571 generic-all
|
||||||
|
|
||||||
com/sun/jdi/sde/SourceDebugExtensionTest.java 8158066 windows-all
|
com/sun/jdi/sde/SourceDebugExtensionTest.java 8158066 windows-all
|
||||||
|
104
test/jdk/com/sun/jdi/RedefineException.java
Normal file
104
test/jdk/com/sun/jdi/RedefineException.java
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2002, 2018, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 4559100
|
||||||
|
* @summary The VM crashes when a method in a redefined class throws an exception.
|
||||||
|
* @comment converted from test/jdk/com/sun/jdi/RedefineException.sh
|
||||||
|
*
|
||||||
|
* @library /test/lib
|
||||||
|
* @run main/othervm RedefineException
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This is another symptomm of 4559100
|
||||||
|
* This causes a bus error on solsparc:
|
||||||
|
* ---- called from signal handler with signal 10 (SIGBUS) ------
|
||||||
|
* [11] constantPoolOopDesc::klass_at_if_loaded(0xffbed4d8, 0x16, 0xffbed5cc, 0x0, 0x1, 0xfa40b330), at 0xfe11568c
|
||||||
|
* [12] methodOopDesc::fast_exception_handler_bci_for(0x6, 0x1, 0xfe400a0c, 0x0, 0x2d1f0, 0x0), at 0xfe12e620
|
||||||
|
* [13] jvmdi::post_exception_throw_event(0x2d1f0, 0xf61036f8, 0xf6103752, 0xf20414a8, 0x2e2928, 0xfe12e190), at 0xfe2a4fa4
|
||||||
|
*/
|
||||||
|
|
||||||
|
import lib.jdb.JdbCommand;
|
||||||
|
import lib.jdb.JdbTest;
|
||||||
|
|
||||||
|
class RedefineExceptionTarg {
|
||||||
|
String str;
|
||||||
|
int ii;
|
||||||
|
static public void main(String[] args) {
|
||||||
|
System.out.println("In Main");
|
||||||
|
RedefineExceptionTarg mine = new RedefineExceptionTarg();
|
||||||
|
mine.a1();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a1() {
|
||||||
|
int a1local = 1;
|
||||||
|
String a1string = "a1";
|
||||||
|
|
||||||
|
ii = 89; // @1 delete this line
|
||||||
|
str = "foo";
|
||||||
|
System.out.println("a1: Calling the original a2/a3. 'The @@@ deleted lines should appear");
|
||||||
|
System.out.println("ii = " + ii); // @1 delete this line
|
||||||
|
a2();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a2() {
|
||||||
|
int a2local = 2;
|
||||||
|
String a2string = "a2";
|
||||||
|
//System.out.println("a2: @ @@delete this line");
|
||||||
|
try {
|
||||||
|
a3();
|
||||||
|
} catch (Exception ee) {
|
||||||
|
System.out.println("a2: Exception caught");
|
||||||
|
}
|
||||||
|
System.out.println("a2: done");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a3() throws Exception {
|
||||||
|
int a3local = 3;
|
||||||
|
String a3string = "a3";
|
||||||
|
System.out.println("a3: @@ delete this line"); // If this line is deleted, the test passes!
|
||||||
|
System.out.println("a3: @1 breakpoint here a3");
|
||||||
|
throw new Exception("This is the exception");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RedefineException extends JdbTest {
|
||||||
|
|
||||||
|
public static void main(String argv[]) {
|
||||||
|
new RedefineException().run();
|
||||||
|
}
|
||||||
|
|
||||||
|
private RedefineException() {
|
||||||
|
super(RedefineExceptionTarg.class.getName(), "RedefineException.java");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runCases() {
|
||||||
|
setBreakpoints(1);
|
||||||
|
jdb.command(JdbCommand.run());
|
||||||
|
redefineClass(1);
|
||||||
|
jdb.command(JdbCommand.pop());
|
||||||
|
jdb.contToExit(1);
|
||||||
|
}
|
||||||
|
}
|
@ -1,119 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright (c) 2002, 2014, 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
# @test
|
|
||||||
# @bug 4559100
|
|
||||||
# @summary The VM crashes when a method in a redefined class throws an exception.
|
|
||||||
# @author Jim Holmlund
|
|
||||||
#
|
|
||||||
# @key intermittent
|
|
||||||
# @run shell RedefineException.sh
|
|
||||||
|
|
||||||
# This is another symptomm of 4559100
|
|
||||||
# This causes a bus error on solsparc:
|
|
||||||
# ---- called from signal handler with signal 10 (SIGBUS) ------
|
|
||||||
# [11] constantPoolOopDesc::klass_at_if_loaded(0xffbed4d8, 0x16, 0xffbed5cc, 0x0, 0x1, 0xfa40b330), at 0xfe11568c
|
|
||||||
# [12] methodOopDesc::fast_exception_handler_bci_for(0x6, 0x1, 0xfe400a0c, 0x0, 0x2d1f0, 0x0), at 0xfe12e620
|
|
||||||
# [13] jvmdi::post_exception_throw_event(0x2d1f0, 0xf61036f8, 0xf6103752, 0xf20414a8, 0x2e2928, 0xfe12e190), at 0xfe2a4fa4
|
|
||||||
|
|
||||||
# These are variables that can be set to control execution
|
|
||||||
|
|
||||||
createJavaFile()
|
|
||||||
{
|
|
||||||
cat <<EOF > $1.java.1
|
|
||||||
|
|
||||||
public class $1 {
|
|
||||||
String str;
|
|
||||||
int ii;
|
|
||||||
static public void main(String[] args) {
|
|
||||||
System.out.println("In Main");
|
|
||||||
$1 mine = new $1();
|
|
||||||
mine.a1();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void a1() {
|
|
||||||
int a1local = 1;
|
|
||||||
String a1string = "a1";
|
|
||||||
|
|
||||||
ii = 89; // @1 delete this line
|
|
||||||
str = "foo";
|
|
||||||
System.out.println("a1: Calling the original a2/a3. 'The @@@ deleted lines should appear");
|
|
||||||
System.out.println("ii = " + ii); // @1 delete this line
|
|
||||||
a2();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void a2() {
|
|
||||||
int a2local = 2;
|
|
||||||
String a2string = "a2";
|
|
||||||
//System.out.println("a2: @ @@delete this line");
|
|
||||||
try {
|
|
||||||
a3();
|
|
||||||
} catch (Exception ee) {
|
|
||||||
System.out.println("a2: Exception caught");
|
|
||||||
}
|
|
||||||
System.out.println("a2: done");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void a3() throws Exception {
|
|
||||||
int a3local = 3;
|
|
||||||
String a3string = "a3";
|
|
||||||
System.out.println("a3: @@ delete this line"); // If this line is deleted, the test passes!
|
|
||||||
System.out.println("a3: @1 breakpoint here a3");
|
|
||||||
throw new Exception("This is the exception");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
dojdbCmds()
|
|
||||||
{
|
|
||||||
setBkpts @1
|
|
||||||
runToBkpt
|
|
||||||
redefineClass @1
|
|
||||||
cmd pop
|
|
||||||
cmd allowExit cont
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
mysetup()
|
|
||||||
{
|
|
||||||
if [ -z "$TESTSRC" ] ; then
|
|
||||||
TESTSRC=.
|
|
||||||
fi
|
|
||||||
|
|
||||||
for ii in . $TESTSRC $TESTSRC/.. ; do
|
|
||||||
if [ -r "$ii/ShellScaffold.sh" ] ; then
|
|
||||||
. $ii/ShellScaffold.sh
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# You could replace this next line with the contents
|
|
||||||
# of ShellScaffold.sh and this script will run just the same.
|
|
||||||
mysetup
|
|
||||||
|
|
||||||
runit
|
|
||||||
pass
|
|
86
test/jdk/com/sun/jdi/RedefineFinal.java
Normal file
86
test/jdk/com/sun/jdi/RedefineFinal.java
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2002, 2018, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 4788344
|
||||||
|
* @summary RedefineClasses is an apparent no-op if instance method is final
|
||||||
|
* @comment converted from test/jdk/com/sun/jdi/RedefineFinal.sh
|
||||||
|
*
|
||||||
|
* @library /test/lib
|
||||||
|
* @compile -g RedefineFinal.java
|
||||||
|
* @run main/othervm RedefineFinal
|
||||||
|
*/
|
||||||
|
|
||||||
|
import jdk.test.lib.process.OutputAnalyzer;
|
||||||
|
import lib.jdb.JdbCommand;
|
||||||
|
import lib.jdb.JdbTest;
|
||||||
|
|
||||||
|
final class RedefineFinalTarg {
|
||||||
|
|
||||||
|
public int m1(int i) {
|
||||||
|
// @1 uncomment System.out.println("I'm here");
|
||||||
|
return m2(i, 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int m2(int i, int j) {
|
||||||
|
if (i < 0 || j < 0) { // @1 breakpoint
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
return i+j;
|
||||||
|
}
|
||||||
|
|
||||||
|
RedefineFinalTarg() {
|
||||||
|
m1(0);
|
||||||
|
m1(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String args[]) {
|
||||||
|
new RedefineFinalTarg();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RedefineFinal extends JdbTest {
|
||||||
|
|
||||||
|
public static void main(String argv[]) {
|
||||||
|
new RedefineFinal().run();
|
||||||
|
}
|
||||||
|
|
||||||
|
private RedefineFinal() {
|
||||||
|
super(RedefineFinalTarg.class.getName(), "RedefineFinal.java");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runCases() {
|
||||||
|
setBreakpoints(1);
|
||||||
|
jdb.command(JdbCommand.run());
|
||||||
|
redefineClass(1, "-g");
|
||||||
|
setBreakpoints(1);
|
||||||
|
jdb.command(JdbCommand.cont());
|
||||||
|
jdb.command(JdbCommand.where(""));
|
||||||
|
jdb.contToExit(1);
|
||||||
|
|
||||||
|
new OutputAnalyzer(getJdbOutput())
|
||||||
|
.shouldNotContain("obsolete");
|
||||||
|
}
|
||||||
|
}
|
@ -1,103 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright (c) 2002, 2014, 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
# @test
|
|
||||||
# @bug 4788344
|
|
||||||
# @summary RedefineClasses is an apparent no-op if instance method is final
|
|
||||||
#
|
|
||||||
# @key intermittent
|
|
||||||
# @run shell RedefineFinal.sh
|
|
||||||
|
|
||||||
compileOptions=-g
|
|
||||||
compileOptions2=-g
|
|
||||||
|
|
||||||
# Uncomment this to see the JDI trace
|
|
||||||
#jdbOptions=-dbgtrace
|
|
||||||
|
|
||||||
createJavaFile()
|
|
||||||
{
|
|
||||||
cat <<EOF > $1.java.1
|
|
||||||
|
|
||||||
public final class $1 {
|
|
||||||
|
|
||||||
public int m1(int i) {
|
|
||||||
// @1 uncomment System.out.println("I'm here");
|
|
||||||
return m2(i, 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int m2(int i, int j) {
|
|
||||||
if (i < 0 || j < 0) { // @1 breakpoint
|
|
||||||
throw new IllegalArgumentException();
|
|
||||||
}
|
|
||||||
return i+j;
|
|
||||||
}
|
|
||||||
|
|
||||||
$1() {
|
|
||||||
m1(0);
|
|
||||||
m1(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String args[]) {
|
|
||||||
new $1();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# This is called to feed cmds to jdb.
|
|
||||||
dojdbCmds()
|
|
||||||
{
|
|
||||||
setBkpts @1
|
|
||||||
runToBkpt @1
|
|
||||||
redefineClass @1
|
|
||||||
setBkpts @1
|
|
||||||
contToBkpt
|
|
||||||
cmd where
|
|
||||||
cmd allowExit cont
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
mysetup()
|
|
||||||
{
|
|
||||||
if [ -z "$TESTSRC" ] ; then
|
|
||||||
TESTSRC=.
|
|
||||||
fi
|
|
||||||
|
|
||||||
for ii in . $TESTSRC $TESTSRC/.. ; do
|
|
||||||
if [ -r "$ii/ShellScaffold.sh" ] ; then
|
|
||||||
. $ii/ShellScaffold.sh
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# You could replace this next line with the contents
|
|
||||||
# of ShellScaffold.sh and this script will run just the same.
|
|
||||||
mysetup
|
|
||||||
|
|
||||||
runit
|
|
||||||
|
|
||||||
jdbFailIfPresent 'obsolete'
|
|
||||||
pass
|
|
101
test/jdk/com/sun/jdi/RedefineIntConstantToLong.java
Normal file
101
test/jdk/com/sun/jdi/RedefineIntConstantToLong.java
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2006, 2018, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 6394084
|
||||||
|
* @summary Redefine class can't handle addition of 64 bit constants in JDK1.5.0_05
|
||||||
|
* @comment converted from test/jdk/com/sun/jdi/RedefineIntConstantToLong.sh
|
||||||
|
*
|
||||||
|
* @library /test/lib
|
||||||
|
* @compile -g RedefineIntConstantToLong.java
|
||||||
|
* @run main/othervm RedefineIntConstantToLong
|
||||||
|
*/
|
||||||
|
|
||||||
|
import jdk.test.lib.process.OutputAnalyzer;
|
||||||
|
import lib.jdb.JdbCommand;
|
||||||
|
import lib.jdb.JdbTest;
|
||||||
|
|
||||||
|
final class RedefineIntConstantToLongTarg {
|
||||||
|
|
||||||
|
public long m1(int i) {
|
||||||
|
long r=0;
|
||||||
|
r = m2(i * 2); // @1 commentout
|
||||||
|
// @1 uncomment r =m2(i * 2L);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long m2(int j) {
|
||||||
|
System.out.println(System.getProperty("line.separator") +
|
||||||
|
"**** public long m2(int j) with value: " + j);
|
||||||
|
return j;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long m2(long j) {
|
||||||
|
System.out.println(System.getProperty("line.separator") +
|
||||||
|
"**** public long m2(long j) with value: " + j);
|
||||||
|
return j;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void doit() throws Exception {
|
||||||
|
long r1 = 0;
|
||||||
|
long r2;
|
||||||
|
r1 = m1(1000);
|
||||||
|
r2 = 0; // @1 breakpoint
|
||||||
|
r2 = m1(1000);
|
||||||
|
if (r1 != r2) { // @1 breakpoint
|
||||||
|
throw new Exception("FAILURE: Expected value: " + r1 + " Actual value: " + r2);
|
||||||
|
} else {
|
||||||
|
System.out.println("SUCCESS: Expected value: " + r1 + " Actual value: " + r2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String args[]) throws Exception {
|
||||||
|
new RedefineIntConstantToLongTarg().doit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RedefineIntConstantToLong extends JdbTest {
|
||||||
|
|
||||||
|
public static void main(String argv[]) {
|
||||||
|
new RedefineIntConstantToLong().run();
|
||||||
|
}
|
||||||
|
|
||||||
|
private RedefineIntConstantToLong() {
|
||||||
|
super(RedefineIntConstantToLongTarg.class.getName(), "RedefineIntConstantToLong.java");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runCases() {
|
||||||
|
setBreakpoints(1);
|
||||||
|
jdb.command(JdbCommand.run());
|
||||||
|
redefineClass(1, "-g");
|
||||||
|
setBreakpoints(1);
|
||||||
|
jdb.command(JdbCommand.cont());
|
||||||
|
jdb.command(JdbCommand.where(""));
|
||||||
|
jdb.contToExit(1);
|
||||||
|
|
||||||
|
new OutputAnalyzer(getJdbOutput())
|
||||||
|
.shouldNotContain("FAILURE:");
|
||||||
|
}
|
||||||
|
}
|
@ -1,118 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright (c) 2006, 2014, 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
# @test
|
|
||||||
# @bug 6394084
|
|
||||||
# @summary Redefine class can't handle addition of 64 bit constants in JDK1.5.0_05
|
|
||||||
#
|
|
||||||
# @key intermittent
|
|
||||||
# @run shell RedefineIntConstantToLong.sh
|
|
||||||
|
|
||||||
compileOptions=-g
|
|
||||||
compileOptions2=-g
|
|
||||||
|
|
||||||
# Uncomment this to see the JDI trace
|
|
||||||
#jdbOptions=-dbgtrace
|
|
||||||
|
|
||||||
createJavaFile()
|
|
||||||
{
|
|
||||||
cat <<EOF > $1.java.1
|
|
||||||
|
|
||||||
public final class $1 {
|
|
||||||
|
|
||||||
public long m1(int i) {
|
|
||||||
long r=0;
|
|
||||||
r = m2(i * 2); // @1 commentout
|
|
||||||
// @1 uncomment r =m2(i * 2L);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long m2(int j) {
|
|
||||||
System.out.println(System.getProperty("line.separator") +
|
|
||||||
"**** public long m2(int j) with value: " + j);
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long m2(long j) {
|
|
||||||
System.out.println(System.getProperty("line.separator") +
|
|
||||||
"**** public long m2(long j) with value: " + j);
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void doit() throws Exception {
|
|
||||||
long r1 = 0;
|
|
||||||
long r2;
|
|
||||||
r1 = m1(1000);
|
|
||||||
r2 = 0; // @1 breakpoint
|
|
||||||
r2 = m1(1000);
|
|
||||||
if (r1 != r2) { // @1 breakpoint
|
|
||||||
throw new Exception("FAILURE: Expected value: " + r1 + " Actual value: " + r2);
|
|
||||||
} else {
|
|
||||||
System.out.println("SUCCESS: Expected value: " + r1 + " Actual value: " + r2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String args[]) throws Exception {
|
|
||||||
new $1().doit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# This is called to feed cmds to jdb.
|
|
||||||
dojdbCmds()
|
|
||||||
{
|
|
||||||
setBkpts @1
|
|
||||||
runToBkpt @1
|
|
||||||
redefineClass @1
|
|
||||||
setBkpts @1
|
|
||||||
contToBkpt
|
|
||||||
cmd where
|
|
||||||
cmd allowExit cont
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
mysetup()
|
|
||||||
{
|
|
||||||
if [ -z "$TESTSRC" ] ; then
|
|
||||||
TESTSRC=.
|
|
||||||
fi
|
|
||||||
|
|
||||||
for ii in . $TESTSRC $TESTSRC/.. ; do
|
|
||||||
if [ -r "$ii/ShellScaffold.sh" ] ; then
|
|
||||||
. $ii/ShellScaffold.sh
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# You could replace this next line with the contents
|
|
||||||
# of ShellScaffold.sh and this script will run just the same.
|
|
||||||
mysetup
|
|
||||||
|
|
||||||
runit
|
|
||||||
|
|
||||||
jdbFailIfPresent 'FAILURE:'
|
|
||||||
pass
|
|
140
test/jdk/com/sun/jdi/RedefineMulti.java
Normal file
140
test/jdk/com/sun/jdi/RedefineMulti.java
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2002, 2018, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 4724076
|
||||||
|
* @summary Redefine does not work in for/while loop
|
||||||
|
* @comment converted from test/jdk/com/sun/jdi/RedefineMulti.sh
|
||||||
|
*
|
||||||
|
* @library /test/lib
|
||||||
|
* @compile -g RedefineMulti.java
|
||||||
|
* @run main/othervm RedefineMulti
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The failure occurs when a method is active and
|
||||||
|
* a method that it calls multiple times is redefined
|
||||||
|
* more than once.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import jdk.test.lib.process.OutputAnalyzer;
|
||||||
|
import lib.jdb.JdbCommand;
|
||||||
|
import lib.jdb.JdbTest;
|
||||||
|
|
||||||
|
class RedefineMultiTarg {
|
||||||
|
|
||||||
|
String field1;
|
||||||
|
String field2;
|
||||||
|
|
||||||
|
// The first time thru the loop in start,
|
||||||
|
// "Before update..." should be printed.
|
||||||
|
// After the first redefine, "After update..." should be printed
|
||||||
|
// After the 2nd redefine, "abcde..." should be printed.
|
||||||
|
// The bug is that "After update..." is printed instead because
|
||||||
|
// stat() calls version 2 of doSomething() instead of
|
||||||
|
// version 3.
|
||||||
|
private void doSomething() {
|
||||||
|
System.out.println("Before update..."); // @1 commentout
|
||||||
|
// @1 uncomment System.out.println("After update..."); // @2 commentout
|
||||||
|
// @2 uncomment System.out.println("abcde...");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start() {
|
||||||
|
for (int i=0; i < 3; i++) {
|
||||||
|
doSomething(); // @1 breakpoint here line 16
|
||||||
|
System.out.println("field1 = " + field1);
|
||||||
|
System.out.println("field2 = " + field2);
|
||||||
|
}
|
||||||
|
// Redefinex myx = new Redefinex();
|
||||||
|
// for (int i = 0; i < 5; i++) {
|
||||||
|
// myx.methodx1(); // line 22
|
||||||
|
// System.out.println("fieldx1 = " + myx.fieldx1);
|
||||||
|
// System.out.println("fieldx2 = " + myx.fieldx2);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
RedefineMultiTarg xxx = new RedefineMultiTarg();
|
||||||
|
xxx.field1 = "field1";
|
||||||
|
xxx.field2 = "field2";
|
||||||
|
xxx.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Redefinex {
|
||||||
|
public String fieldx1;
|
||||||
|
public String fieldx2;
|
||||||
|
|
||||||
|
Redefinex() {
|
||||||
|
fieldx1 = "fieldx1";
|
||||||
|
fieldx2 = "fieldx2";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void methodx1() {
|
||||||
|
System.out.println("redefinex 1");
|
||||||
|
//System.out.println("redefinex 2");
|
||||||
|
//System.out.println("redefinex 3");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********
|
||||||
|
Steps to reproduce this problem:
|
||||||
|
a. add line breakpoint in start()
|
||||||
|
b. debug
|
||||||
|
c. when breakpoint is hit, type continue. You should see output "Before update..."
|
||||||
|
d. change "Before update" to "After update"
|
||||||
|
e. redefine, and set line breakpoint (see step a)
|
||||||
|
f. type continue. You should see output "After update"
|
||||||
|
g. change "After update" to "abcde"
|
||||||
|
h. redefine, and set line breakpoint (see step a)
|
||||||
|
i. type continue. The output is shown as "After update"
|
||||||
|
j. to see "abcde" output, users will have to pop the stack, and re-execute method start().
|
||||||
|
************/
|
||||||
|
|
||||||
|
public class RedefineMulti extends JdbTest {
|
||||||
|
|
||||||
|
public static void main(String argv[]) {
|
||||||
|
new RedefineMulti().run();
|
||||||
|
}
|
||||||
|
|
||||||
|
private RedefineMulti() {
|
||||||
|
super(RedefineMultiTarg.class.getName(), "RedefineMulti.java");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runCases() {
|
||||||
|
setBreakpoints(1);
|
||||||
|
jdb.command(JdbCommand.run());
|
||||||
|
jdb.command(JdbCommand.cont());
|
||||||
|
redefineClass(1, "-g");
|
||||||
|
setBreakpoints(1);
|
||||||
|
jdb.command(JdbCommand.cont());
|
||||||
|
redefineClass(2, "-g");
|
||||||
|
jdb.contToExit(1);
|
||||||
|
|
||||||
|
new OutputAnalyzer(getDebuggeeOutput())
|
||||||
|
.shouldNotContain("Internal exception:")
|
||||||
|
.shouldContain("abcde");
|
||||||
|
}
|
||||||
|
}
|
@ -1,154 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright (c) 2002, 2014, 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
# @test
|
|
||||||
# @bug 4724076
|
|
||||||
# @summary Redefine does not work in for/while loop
|
|
||||||
# @author Jim Holmlund/Swamy Venkataramanappa
|
|
||||||
#
|
|
||||||
# The failure occurs when a method is active and
|
|
||||||
# a method that it calls multiple times is redefined
|
|
||||||
# more than once.
|
|
||||||
# @run shell/timeout=240 RedefineMulti.sh
|
|
||||||
|
|
||||||
compileOptions=-g
|
|
||||||
#java=java_g
|
|
||||||
|
|
||||||
createJavaFile()
|
|
||||||
{
|
|
||||||
cat <<EOF > $1.java.1
|
|
||||||
|
|
||||||
public class $1 {
|
|
||||||
|
|
||||||
String field1;
|
|
||||||
String field2;
|
|
||||||
|
|
||||||
// The first time thru the loop in start,
|
|
||||||
// "Before update..." should be printed.
|
|
||||||
// After the first redefine, "After update..." should be printed
|
|
||||||
// After the 2nd redefine, "abcde..." should be printed.
|
|
||||||
// The bug is that "After update..." is printed instead because
|
|
||||||
// stat() calls version 2 of doSomething() instead of
|
|
||||||
// version 3.
|
|
||||||
private void doSomething() {
|
|
||||||
System.out.println("Before update..."); // @1 commentout
|
|
||||||
// @1 uncomment System.out.println("After update..."); // @2 commentout
|
|
||||||
// @2 uncomment System.out.println("abcde...");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void start() {
|
|
||||||
for (int i=0; i < 3; i++) {
|
|
||||||
doSomething(); // @1 breakpoint here line 16
|
|
||||||
System.out.println("field1 = " + field1);
|
|
||||||
System.out.println("field2 = " + field2);
|
|
||||||
}
|
|
||||||
// Redefinex myx = new Redefinex();
|
|
||||||
// for (int i = 0; i < 5; i++) {
|
|
||||||
// myx.methodx1(); // line 22
|
|
||||||
// System.out.println("fieldx1 = " + myx.fieldx1);
|
|
||||||
// System.out.println("fieldx2 = " + myx.fieldx2);
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
$1 xxx = new $1();
|
|
||||||
xxx.field1 = "field1";
|
|
||||||
xxx.field2 = "field2";
|
|
||||||
xxx.start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Redefinex {
|
|
||||||
public String fieldx1;
|
|
||||||
public String fieldx2;
|
|
||||||
|
|
||||||
Redefinex() {
|
|
||||||
fieldx1 = "fieldx1";
|
|
||||||
fieldx2 = "fieldx2";
|
|
||||||
}
|
|
||||||
|
|
||||||
public void methodx1() {
|
|
||||||
System.out.println("redefinex 1");
|
|
||||||
//System.out.println("redefinex 2");
|
|
||||||
//System.out.println("redefinex 3");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********
|
|
||||||
Steps to reproduce this problem:
|
|
||||||
a. add line breakpoint in start()
|
|
||||||
b. debug
|
|
||||||
c. when breakpoint is hit, type continue. You should see output
|
|
||||||
"Before update..."
|
|
||||||
d. change "Before update" to "After update"
|
|
||||||
e. redefine, and set line breakpoint (see step a)
|
|
||||||
f. type continue. You should see output "After update"
|
|
||||||
g. change "After update" to "abcde"
|
|
||||||
h. redefine, and set line breakpoint (see step a)
|
|
||||||
i. type continue. The output is shown as "After update"
|
|
||||||
|
|
||||||
j. to see "abcde" output, users will have to pop the stack, and
|
|
||||||
re-execute method start().
|
|
||||||
************/
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# This is called to feed cmds to jdb.
|
|
||||||
dojdbCmds()
|
|
||||||
{
|
|
||||||
setBkpts @1
|
|
||||||
runToBkpt @1
|
|
||||||
contToBkpt
|
|
||||||
redefineClass @1
|
|
||||||
setBkpts @1
|
|
||||||
contToBkpt
|
|
||||||
redefineClass @2
|
|
||||||
cmd allowExit cont
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
mysetup()
|
|
||||||
{
|
|
||||||
if [ -z "$TESTSRC" ] ; then
|
|
||||||
TESTSRC=.
|
|
||||||
fi
|
|
||||||
|
|
||||||
for ii in . $TESTSRC $TESTSRC/.. ; do
|
|
||||||
if [ -r "$ii/ShellScaffold.sh" ] ; then
|
|
||||||
. $ii/ShellScaffold.sh
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# You could replace this next line with the contents
|
|
||||||
# of ShellScaffold.sh and this script will run just the same.
|
|
||||||
mysetup
|
|
||||||
|
|
||||||
runit
|
|
||||||
debuggeeFailIfPresent "Internal exception:"
|
|
||||||
debuggeeFailIfNotPresent "abcde"
|
|
||||||
pass
|
|
91
test/jdk/com/sun/jdi/RedefinePop.java
Normal file
91
test/jdk/com/sun/jdi/RedefinePop.java
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2002, 2018, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 4622663
|
||||||
|
* @summary redefine and pop top frame from jdb gets assertion failure
|
||||||
|
* @comment converted from test/jdk/com/sun/jdi/RedefinePop.sh
|
||||||
|
*
|
||||||
|
* @library /test/lib
|
||||||
|
* @compile -g RedefinePop.java
|
||||||
|
* @run main/othervm RedefinePop
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The failure occurs with debug java when the pop deletes the
|
||||||
|
* line that called the method which is being popped.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* assert(index<len, "should have found method")
|
||||||
|
* [8] report_assertion_failure(0xfe2a54d9, 0xfe2a54e3, 0x2cc, 0xfe2a5527, 0xfffffff8, 0x3f2b8), at 0xfda1e5e8
|
||||||
|
* [9] methodOopDesc::jni_id(0xf590a2f0, 0x3e868, 0x8, 0xffbed760, 0xf590a3ac, 0xffbed664), at 0xfdcd7a2c
|
||||||
|
* [10] JvmdiThreadState::compare_and_set_current_location(0x3f450, 0xf590a2f0, 0xf590a33f, 0x1, 0x1, 0x3e868), at 0xfdc0f670
|
||||||
|
* [11] jvmdi::at_single_stepping_point(0x3e868, 0xf590a2f0, 0xf590a33f, 0x5, 0x0, 0x0), at 0xfdc29184
|
||||||
|
* [12] InterpreterRuntime::at_safepoint(0x3e868, 0xb6, 0x2, 0xf9c28744, 0xf590a038, 0xffbed880), at 0xfdb0d590
|
||||||
|
*/
|
||||||
|
|
||||||
|
import jdk.test.lib.process.OutputAnalyzer;
|
||||||
|
import lib.jdb.JdbCommand;
|
||||||
|
import lib.jdb.JdbTest;
|
||||||
|
|
||||||
|
class RedefinePopTarg {
|
||||||
|
static public void main(String[] args) {
|
||||||
|
RedefinePopTarg mine = new RedefinePopTarg();
|
||||||
|
mine.a1(44); // @1 delete the call that we are in when the pop occurs
|
||||||
|
mine.a4();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a1(int p1) {
|
||||||
|
System.out.println("a1: @1 breakpoint here");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a4() {
|
||||||
|
System.out.println("a4: The next line should not say Ni!");
|
||||||
|
System.out.println("a4: Ni!"); // @1 delete
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RedefinePop extends JdbTest {
|
||||||
|
|
||||||
|
public static void main(String argv[]) {
|
||||||
|
new RedefinePop().run();
|
||||||
|
}
|
||||||
|
|
||||||
|
private RedefinePop() {
|
||||||
|
super(RedefinePopTarg.class.getName(), "RedefinePop.java");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runCases() {
|
||||||
|
setBreakpoints(1);
|
||||||
|
jdb.command(JdbCommand.run());
|
||||||
|
redefineClass(1, "-g");
|
||||||
|
jdb.command(JdbCommand.pop());
|
||||||
|
jdb.contToExit(1);
|
||||||
|
|
||||||
|
new OutputAnalyzer(getDebuggeeOutput())
|
||||||
|
.shouldNotContain("Internal exception:");
|
||||||
|
}
|
||||||
|
}
|
@ -1,102 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright (c) 2002, 2014, 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
# @test
|
|
||||||
# @bug 4622663
|
|
||||||
# @summary redefine and pop top frame from jdb gets assertion failure
|
|
||||||
# @author Jim Holmlund/Swamy Venkataramanappa
|
|
||||||
#
|
|
||||||
# The failure occurs with debug java when the pop deletes the
|
|
||||||
# line that called the method which is being popped.
|
|
||||||
# @key intermittent
|
|
||||||
# @run shell RedefinePop.sh
|
|
||||||
|
|
||||||
|
|
||||||
# assert(index<len, "should have found method")
|
|
||||||
# [8] report_assertion_failure(0xfe2a54d9, 0xfe2a54e3, 0x2cc, 0xfe2a5527, 0xfffffff8, 0x3f2b8), at 0xfda1e5e8
|
|
||||||
# [9] methodOopDesc::jni_id(0xf590a2f0, 0x3e868, 0x8, 0xffbed760, 0xf590a3ac, 0xffbed664), at 0xfdcd7a2c
|
|
||||||
# [10] JvmdiThreadState::compare_and_set_current_location(0x3f450, 0xf590a2f0, 0xf590a33f, 0x1, 0x1, 0x3e868), at 0xfdc0f670
|
|
||||||
# [11] jvmdi::at_single_stepping_point(0x3e868, 0xf590a2f0, 0xf590a33f, 0x5, 0x0, 0x0), at 0xfdc29184
|
|
||||||
# [12] InterpreterRuntime::at_safepoint(0x3e868, 0xb6, 0x2, 0xf9c28744, 0xf590a038, 0xffbed880), at 0xfdb0d590
|
|
||||||
|
|
||||||
# These are variables that can be set to control execution
|
|
||||||
|
|
||||||
compileOptions=-g
|
|
||||||
|
|
||||||
createJavaFile()
|
|
||||||
{
|
|
||||||
cat <<EOF > $1.java.1
|
|
||||||
|
|
||||||
public class $1 {
|
|
||||||
static public void main(String[] args) {
|
|
||||||
$1 mine = new $1();
|
|
||||||
mine.a1(44); // @1 delete the call that we are in when the pop occurs
|
|
||||||
mine.a4();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void a1(int p1) {
|
|
||||||
System.out.println("a1: @1 breakpoint here");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void a4() {
|
|
||||||
System.out.println("a4: The next line should not say Ni!");
|
|
||||||
System.out.println("a4: Ni!"); // @1 delete
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# This is called to feed cmds to jdb.
|
|
||||||
dojdbCmds()
|
|
||||||
{
|
|
||||||
setBkpts @1
|
|
||||||
runToBkpt @1
|
|
||||||
redefineClass @1
|
|
||||||
cmd pop
|
|
||||||
cmd allowExit cont
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
mysetup()
|
|
||||||
{
|
|
||||||
if [ -z "$TESTSRC" ] ; then
|
|
||||||
TESTSRC=.
|
|
||||||
fi
|
|
||||||
|
|
||||||
for ii in . $TESTSRC $TESTSRC/.. ; do
|
|
||||||
if [ -r "$ii/ShellScaffold.sh" ] ; then
|
|
||||||
. $ii/ShellScaffold.sh
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# You could replace this next line with the contents
|
|
||||||
# of ShellScaffold.sh and this script will run just the same.
|
|
||||||
mysetup
|
|
||||||
|
|
||||||
runit
|
|
||||||
debuggeeFailIfPresent "Internal exception:"
|
|
||||||
pass
|
|
82
test/jdk/com/sun/jdi/RedefineStep.java
Normal file
82
test/jdk/com/sun/jdi/RedefineStep.java
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2002, 2018, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 4689395
|
||||||
|
* @summary "step over" after a class is redefined acts like "step out"
|
||||||
|
* @comment converted from test/jdk/com/sun/jdi/RedefineStep.sh
|
||||||
|
*
|
||||||
|
* @library /test/lib
|
||||||
|
* @compile -g RedefineStep.java
|
||||||
|
* @run main/othervm RedefineStep
|
||||||
|
*/
|
||||||
|
|
||||||
|
import jdk.test.lib.process.OutputAnalyzer;
|
||||||
|
import lib.jdb.JdbCommand;
|
||||||
|
import lib.jdb.JdbTest;
|
||||||
|
|
||||||
|
class RedefineStepTarg {
|
||||||
|
static int counter;
|
||||||
|
static public void main(String[] args) {
|
||||||
|
RedefineStepTarg mine = new RedefineStepTarg();
|
||||||
|
mine.a1(10);
|
||||||
|
System.out.println("done"); // should not see this
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a1(int p1) {
|
||||||
|
System.out.println("jj0"); // @1 breakpoint line 10
|
||||||
|
a2();
|
||||||
|
System.out.println("jj3"); // @1 delete
|
||||||
|
}
|
||||||
|
public void a2() {
|
||||||
|
System.out.println("a2");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RedefineStep extends JdbTest {
|
||||||
|
|
||||||
|
public static void main(String argv[]) {
|
||||||
|
new RedefineStep().run();
|
||||||
|
}
|
||||||
|
|
||||||
|
private RedefineStep() {
|
||||||
|
super(RedefineStepTarg.class.getName(), "RedefineStep.java");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runCases() {
|
||||||
|
setBreakpoints(1);
|
||||||
|
jdb.command(JdbCommand.run());
|
||||||
|
redefineClass(1, "-g");
|
||||||
|
|
||||||
|
jdb.command(JdbCommand.next());
|
||||||
|
jdb.command(JdbCommand.next());
|
||||||
|
jdb.command(JdbCommand.next());
|
||||||
|
jdb.command(JdbCommand.next());
|
||||||
|
jdb.command(JdbCommand.next());
|
||||||
|
|
||||||
|
new OutputAnalyzer(getJdbOutput())
|
||||||
|
.shouldNotContain("should not see this");
|
||||||
|
}
|
||||||
|
}
|
@ -1,102 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright (c) 2002, 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
# @test
|
|
||||||
# @bug 4689395
|
|
||||||
# @summary "step over" after a class is redefined acts like "step out"
|
|
||||||
# @author Jim Holmlund
|
|
||||||
# @key intermittent
|
|
||||||
# @run shell RedefineStep.sh
|
|
||||||
#
|
|
||||||
|
|
||||||
#pkg=untitled7
|
|
||||||
classname=gus1
|
|
||||||
compileOptions=-g
|
|
||||||
#java=java_g
|
|
||||||
|
|
||||||
# Uncomment this to see the JDI trace
|
|
||||||
#jdbOptions=-dbgtrace
|
|
||||||
|
|
||||||
createJavaFile()
|
|
||||||
{
|
|
||||||
cat <<EOF > $1.java.1
|
|
||||||
|
|
||||||
public class $1 {
|
|
||||||
static int counter;
|
|
||||||
static public void main(String[] args) {
|
|
||||||
$1 mine = new $1();
|
|
||||||
mine.a1(10);
|
|
||||||
System.out.println("done"); // should not see this
|
|
||||||
}
|
|
||||||
|
|
||||||
public void a1(int p1) {
|
|
||||||
System.out.println("jj0"); // @1 breakpoint line 10
|
|
||||||
a2();
|
|
||||||
System.out.println("jj3"); // @1 delete
|
|
||||||
}
|
|
||||||
public void a2() {
|
|
||||||
System.out.println("a2");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# This is called to feed cmds to jdb.
|
|
||||||
dojdbCmds()
|
|
||||||
{
|
|
||||||
setBkpts @1
|
|
||||||
runToBkpt @1
|
|
||||||
redefineClass @1
|
|
||||||
|
|
||||||
cmd next
|
|
||||||
cmd next
|
|
||||||
cmd next
|
|
||||||
cmd next
|
|
||||||
cmd next
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
mysetup()
|
|
||||||
{
|
|
||||||
if [ -z "$TESTSRC" ] ; then
|
|
||||||
TESTSRC=.
|
|
||||||
fi
|
|
||||||
|
|
||||||
for ii in . $TESTSRC $TESTSRC/.. ; do
|
|
||||||
if [ -r "$ii/ShellScaffold.sh" ] ; then
|
|
||||||
. $ii/ShellScaffold.sh
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# You could replace this next line with the contents
|
|
||||||
# of ShellScaffold.sh and this script will run just the same.
|
|
||||||
mysetup
|
|
||||||
|
|
||||||
runit
|
|
||||||
|
|
||||||
jdbFailIfPresent 'should not see this'
|
|
||||||
pass
|
|
110
test/jdk/com/sun/jdi/RedefineTTYLineNumber.java
Normal file
110
test/jdk/com/sun/jdi/RedefineTTYLineNumber.java
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2002, 2018, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 4660756
|
||||||
|
* @summary TTY: Need to clear source cache after doing a redefine class
|
||||||
|
* @comment converted from test/jdk/com/sun/jdi/RedefineTTYLineNumber.sh
|
||||||
|
*
|
||||||
|
* @library /test/lib
|
||||||
|
* @compile -g RedefineTTYLineNumber.java
|
||||||
|
* @run main/othervm RedefineTTYLineNumber
|
||||||
|
*/
|
||||||
|
|
||||||
|
import jdk.test.lib.Asserts;
|
||||||
|
import jdk.test.lib.process.OutputAnalyzer;
|
||||||
|
import lib.jdb.JdbCommand;
|
||||||
|
import lib.jdb.JdbTest;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
class RedefineTTYLineNumberTarg {
|
||||||
|
|
||||||
|
public void B() {
|
||||||
|
System.out.println("in B: @1 delete"); // delete 1 line before A method
|
||||||
|
}
|
||||||
|
|
||||||
|
public void A() {
|
||||||
|
System.out.println("expected statement printed by jdb");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
RedefineTTYLineNumberTarg untitled41 = new RedefineTTYLineNumberTarg();
|
||||||
|
untitled41.A();
|
||||||
|
System.out.println("done");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RedefineTTYLineNumber extends JdbTest {
|
||||||
|
|
||||||
|
public static void main(String argv[]) {
|
||||||
|
new RedefineTTYLineNumber().run();
|
||||||
|
}
|
||||||
|
|
||||||
|
private RedefineTTYLineNumber() {
|
||||||
|
super(DEBUGGEE_CLASS, SOURCE_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final static String DEBUGGEE_CLASS = RedefineTTYLineNumberTarg.class.getName();
|
||||||
|
private final static String SOURCE_FILE = "RedefineTTYLineNumber.java";
|
||||||
|
|
||||||
|
// parses line number from the jdb "Breakpoint hit" message
|
||||||
|
private static int parseLineNum(String s) {
|
||||||
|
// Breakpoint hit: "thread=main", RedefineTTYLineNumberTarg.A(), line=49 bci=0
|
||||||
|
// 49 System.out.println("expected statement printed by jdb");
|
||||||
|
Matcher m = Pattern.compile("\\bline=(\\d+)\\b").matcher(s);
|
||||||
|
if (!m.find()) {
|
||||||
|
throw new RuntimeException("could not parse line number");
|
||||||
|
}
|
||||||
|
return Integer.parseInt(m.group(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void verifyBPSource(int n, String reply) {
|
||||||
|
if (!reply.contains("expected statement printed by jdb")) {
|
||||||
|
throw new RuntimeException("Breakpoint source (" + n + ") is not correct");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runCases() {
|
||||||
|
jdb.command(JdbCommand.stopIn(DEBUGGEE_CLASS, "A"));
|
||||||
|
String bp1Reply = execCommand(JdbCommand.run()).getStdout();
|
||||||
|
int bp1Line = parseLineNum(bp1Reply);
|
||||||
|
redefineClass(1, "-g");
|
||||||
|
jdb.command(JdbCommand.pop());
|
||||||
|
jdb.command(JdbCommand.stopIn(DEBUGGEE_CLASS, "A"));
|
||||||
|
String bp2Reply = execCommand(JdbCommand.cont()).getStdout();
|
||||||
|
int bp2Line = parseLineNum(bp2Reply);
|
||||||
|
|
||||||
|
new OutputAnalyzer(getDebuggeeOutput())
|
||||||
|
.shouldNotContain("Internal exception:");
|
||||||
|
// 1 line is deleted before RedefineTTYLineNumberTarg.A(),
|
||||||
|
// so bp2Line should be equals bp1Line-1
|
||||||
|
Asserts.assertEquals(bp2Line, bp1Line - 1, "BP line numbers");
|
||||||
|
verifyBPSource(1, bp1Reply);
|
||||||
|
// uncomment the following line to reproduce JDK-8210927
|
||||||
|
//verifyBPSource(2, bp2Reply);
|
||||||
|
}
|
||||||
|
}
|
@ -1,100 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright (c) 2002, 2014, 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
# @test
|
|
||||||
# @bug 4660756
|
|
||||||
# @summary TTY: Need to clear source cache after doing a redefine class
|
|
||||||
# @author Jim Holmlund
|
|
||||||
# @key intermittent
|
|
||||||
# @run shell/timeout=240 RedefineTTYLineNumber.sh
|
|
||||||
|
|
||||||
#set -x
|
|
||||||
# These are variables that can be set to control execution
|
|
||||||
|
|
||||||
#pkg=untitled7
|
|
||||||
#classname=Untitled3
|
|
||||||
compileOptions=-g
|
|
||||||
#java=java_g
|
|
||||||
|
|
||||||
createJavaFile()
|
|
||||||
{
|
|
||||||
cat <<EOF > $1.java.1
|
|
||||||
|
|
||||||
public class $1 {
|
|
||||||
|
|
||||||
public void B() {
|
|
||||||
System.out.println("in B");
|
|
||||||
System.out.println("in B: @1 delete");
|
|
||||||
}
|
|
||||||
|
|
||||||
// line number sensitive!!! Next line must be line 10.
|
|
||||||
public void A() {
|
|
||||||
System.out.println("in A, about to call B"); // 11 before, 10 afterward
|
|
||||||
System.out.println("out from B");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
$1 untitled41 = new $1();
|
|
||||||
untitled41.A();
|
|
||||||
System.out.println("done");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# This is called to feed cmds to jdb.
|
|
||||||
dojdbCmds()
|
|
||||||
{
|
|
||||||
cmd stop in shtest.A
|
|
||||||
runToBkpt
|
|
||||||
#jdbFailIfNotPresent "System\.out\.println" 3
|
|
||||||
redefineClass @1
|
|
||||||
cmd pop
|
|
||||||
cmd stop in shtest.A
|
|
||||||
contToBkpt
|
|
||||||
#jdbFailIfNotPresent "System\.out\.println" 3
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
mysetup()
|
|
||||||
{
|
|
||||||
if [ -z "$TESTSRC" ] ; then
|
|
||||||
TESTSRC=.
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -r $TESTSRC/ShellScaffold.sh ] ; then
|
|
||||||
. $TESTSRC/ShellScaffold.sh
|
|
||||||
elif [ -r $TESTSRC/../ShellScaffold.sh ] ; then
|
|
||||||
. $TESTSRC/../ShellScaffold.sh
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# You could replace this next line with the contents
|
|
||||||
# of ShellScaffold.sh and this script will run just the same.
|
|
||||||
mysetup
|
|
||||||
|
|
||||||
runit
|
|
||||||
debuggeeFailIfPresent "Internal exception:"
|
|
||||||
pass
|
|
198
test/jdk/com/sun/jdi/StringConvertTest.java
Normal file
198
test/jdk/com/sun/jdi/StringConvertTest.java
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2002, 2018, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 4511950 4843082
|
||||||
|
* @summary 1. jdb's expression evaluation doesn't perform string conversion properly
|
||||||
|
* 2. TTY: run on expression evaluation
|
||||||
|
* @comment converted from test/jdk/com/sun/jdi/StringConvertTest.sh
|
||||||
|
*
|
||||||
|
* @library /test/lib
|
||||||
|
* @compile -g StringConvertTest.java
|
||||||
|
* @run main/othervm StringConvertTest
|
||||||
|
*/
|
||||||
|
|
||||||
|
import jdk.test.lib.process.OutputAnalyzer;
|
||||||
|
import lib.jdb.JdbCommand;
|
||||||
|
import lib.jdb.JdbTest;
|
||||||
|
|
||||||
|
class StringConvertTarg {
|
||||||
|
String me;
|
||||||
|
static JJ1 x1;
|
||||||
|
static JJ2 x2;
|
||||||
|
static JJ2[] x3 = new JJ2[2];
|
||||||
|
static String x4 = "abc";
|
||||||
|
static int ii = 89;
|
||||||
|
static String grower = "grower";
|
||||||
|
static StringBuffer sbGrower = new StringBuffer("sbGrower");
|
||||||
|
int ivar = 89;
|
||||||
|
StringConvertTarg(String xx) {
|
||||||
|
me = xx;
|
||||||
|
}
|
||||||
|
|
||||||
|
static String fred() {
|
||||||
|
return "a static method";
|
||||||
|
}
|
||||||
|
|
||||||
|
void gus() {
|
||||||
|
int gusLoc = 1;
|
||||||
|
StringBuffer sbTim = new StringBuffer("tim");
|
||||||
|
int kk = 1; //@1 breakpoint
|
||||||
|
}
|
||||||
|
|
||||||
|
static String growit(String extra) {
|
||||||
|
grower += extra;
|
||||||
|
return grower;
|
||||||
|
}
|
||||||
|
|
||||||
|
static String sbGrowit(String extra) {
|
||||||
|
sbGrower.append(extra);
|
||||||
|
return sbGrower.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
x1 = new JJ1("first JJ1");
|
||||||
|
x2 = new JJ2("first JJ2");
|
||||||
|
x3[0] = new JJ2("array0");
|
||||||
|
x3[1] = new JJ2("array1");
|
||||||
|
StringConvertTarg loc1 = new StringConvertTarg("first me");
|
||||||
|
|
||||||
|
// These just show what output should look like
|
||||||
|
System.out.println("x1 = " + x1);
|
||||||
|
System.out.println("x2 = " + x2);
|
||||||
|
System.out.println("x3.toString = " + x3.toString());
|
||||||
|
System.out.println("x4.toString = " + x4.toString());
|
||||||
|
|
||||||
|
// Dont want to call growit since it would change
|
||||||
|
// the value.
|
||||||
|
|
||||||
|
System.out.println("loc1 = " + loc1);
|
||||||
|
System.out.println("-" + loc1);
|
||||||
|
loc1.gus();
|
||||||
|
}
|
||||||
|
|
||||||
|
// This does not have a toString method
|
||||||
|
static class JJ1 {
|
||||||
|
String me;
|
||||||
|
|
||||||
|
JJ1(String whoAmI) {
|
||||||
|
me = whoAmI;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This has a toString method
|
||||||
|
static class JJ2 {
|
||||||
|
String me;
|
||||||
|
|
||||||
|
JJ2(String whoAmI) {
|
||||||
|
me = whoAmI;
|
||||||
|
}
|
||||||
|
public String toString() {
|
||||||
|
return me;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int meth1() {
|
||||||
|
return 89;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class StringConvertTest extends JdbTest {
|
||||||
|
public static void main(String argv[]) {
|
||||||
|
new StringConvertTest().run();
|
||||||
|
}
|
||||||
|
|
||||||
|
private StringConvertTest() {
|
||||||
|
super(DEBUGGEE_CLASS, SOURCE_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final String DEBUGGEE_CLASS = StringConvertTarg.class.getName();
|
||||||
|
private static final String SOURCE_FILE = "StringConvertTest.java";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runCases() {
|
||||||
|
setBreakpoints(1);
|
||||||
|
// Run to breakpoint #1
|
||||||
|
jdb.command(JdbCommand.run());
|
||||||
|
|
||||||
|
// Each print without the 'toString()' should print the
|
||||||
|
// same thing as the following print with the toString().
|
||||||
|
// The "print 1"s are just spacers
|
||||||
|
jdb.command(JdbCommand.print("StringConvertTarg.x1"));
|
||||||
|
jdb.command(JdbCommand.print("StringConvertTarg.x1.toString()"));
|
||||||
|
jdb.command(JdbCommand.print("1"));
|
||||||
|
|
||||||
|
jdb.command(JdbCommand.print("StringConvertTarg.x2"));
|
||||||
|
jdb.command(JdbCommand.print("StringConvertTarg.x2.toString()"));
|
||||||
|
jdb.command(JdbCommand.print("1"));
|
||||||
|
|
||||||
|
// arrays is a special case.
|
||||||
|
// StringConvertTarg prints:
|
||||||
|
// x3.toString = [LStringConvertTarg$JJ2;@61443d8f
|
||||||
|
// jdb "print ((Object)StringConvertTarg.x3).toString()" prints:
|
||||||
|
// com.sun.tools.example.debug.expr.ParseException:
|
||||||
|
// No instance field or method with the name toString in StringConvertTarg$JJ2[]
|
||||||
|
// ((Object)StringConvertTarg.x3).toString() = null
|
||||||
|
// jdb "print (Object)(StringConvertTarg.x3)" prints:
|
||||||
|
// (Object)(StringConvertTarg.x3) = instance of StringConvertTarg$JJ2[2] (id=624)
|
||||||
|
/*
|
||||||
|
jdb.command(JdbCommand.print("(Object)(StringConvertTarg.x3)"));
|
||||||
|
jdb.command(JdbCommand.print("((Object)StringConvertTarg.x3).toString()"));
|
||||||
|
jdb.command(JdbCommand.print("1"));
|
||||||
|
*/
|
||||||
|
|
||||||
|
jdb.command(JdbCommand.print("StringConvertTarg.x4"));
|
||||||
|
jdb.command(JdbCommand.print("StringConvertTarg.x4.toString()"));
|
||||||
|
jdb.command(JdbCommand.print("1"));
|
||||||
|
|
||||||
|
// Make sure jdb doesn't call a method multiple times.
|
||||||
|
jdb.command(JdbCommand.print("StringConvertTarg.growit(\"xyz\")"));
|
||||||
|
jdb.command(JdbCommand.eval("StringConvertTarg.sbGrower.append(\"xyz\")"));
|
||||||
|
jdb.command(JdbCommand.print("1"));
|
||||||
|
|
||||||
|
jdb.command(JdbCommand.eval("sbTim.toString()"));
|
||||||
|
jdb.command(JdbCommand.print("1"));
|
||||||
|
|
||||||
|
jdb.command(JdbCommand.print("this"));
|
||||||
|
jdb.command(JdbCommand.print("this.toString()"));
|
||||||
|
jdb.command(JdbCommand.print("1"));
|
||||||
|
|
||||||
|
// A possible bug is that this ends up with multiple "s
|
||||||
|
jdb.command(JdbCommand.print("\"--\"StringConvertTarg.x1"));
|
||||||
|
jdb.command(JdbCommand.print("1"));
|
||||||
|
|
||||||
|
// This too
|
||||||
|
jdb.command(JdbCommand.print("StringConvertTarg.x4 + 2"));
|
||||||
|
jdb.command(JdbCommand.print("1"));
|
||||||
|
|
||||||
|
jdb.command(JdbCommand.print("this.ivar"));
|
||||||
|
jdb.command(JdbCommand.print("gusLoc"));
|
||||||
|
jdb.command(JdbCommand.print("1"));
|
||||||
|
|
||||||
|
new OutputAnalyzer(jdb.getJdbOutput())
|
||||||
|
.shouldNotContain("\"\"")
|
||||||
|
.shouldNotContain("instance of")
|
||||||
|
.shouldNotContain("xyzxyz");
|
||||||
|
}
|
||||||
|
}
|
@ -1,211 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright (c) 2002, 2014, 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
# @test
|
|
||||||
# @bug 4511950 4843082
|
|
||||||
# @summary 1. jdb's expression evaluation doesn't perform string conversion properly
|
|
||||||
# 2. TTY: run on expression evaluation
|
|
||||||
# @author jim/suvasis mukherjee
|
|
||||||
#
|
|
||||||
# @key intermittent
|
|
||||||
# @run shell StringConvertTest.sh
|
|
||||||
|
|
||||||
# Run this script to see the bug. See comments at the end
|
|
||||||
# of the .java file for info on what the bug looks like.
|
|
||||||
|
|
||||||
# These are variables that can be set to control execution
|
|
||||||
|
|
||||||
#pkg=untitled7
|
|
||||||
classname=StringConvertTest
|
|
||||||
compileOptions=-g
|
|
||||||
#java=java_g
|
|
||||||
#mode=-Xcomp
|
|
||||||
|
|
||||||
#jdbOptions=-dbgtrace
|
|
||||||
createJavaFile()
|
|
||||||
{
|
|
||||||
cat <<EOF > $1.java.1
|
|
||||||
|
|
||||||
class $classname {
|
|
||||||
String me;
|
|
||||||
static JJ1 x1;
|
|
||||||
static JJ2 x2;
|
|
||||||
static JJ2[] x3 = new JJ2[2];
|
|
||||||
static String x4 = "abc";
|
|
||||||
static int ii = 89;
|
|
||||||
static String grower = "grower";
|
|
||||||
static StringBuffer sbGrower = new StringBuffer("sbGrower");
|
|
||||||
int ivar = 89;
|
|
||||||
$classname(String xx) {
|
|
||||||
me = xx;
|
|
||||||
}
|
|
||||||
|
|
||||||
static String fred() {
|
|
||||||
return "a static method";
|
|
||||||
}
|
|
||||||
|
|
||||||
void gus() {
|
|
||||||
int gusLoc = 1;
|
|
||||||
StringBuffer sbTim = new StringBuffer("tim");
|
|
||||||
int kk = 1; //@1 breakpoint
|
|
||||||
}
|
|
||||||
|
|
||||||
static String growit(String extra) {
|
|
||||||
grower += extra;
|
|
||||||
return grower;
|
|
||||||
}
|
|
||||||
|
|
||||||
static String sbGrowit(String extra) {
|
|
||||||
sbGrower.append(extra);
|
|
||||||
return sbGrower.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
x1 = new JJ1("first JJ1");
|
|
||||||
x2 = new JJ2("first JJ2");
|
|
||||||
x3[0] = new JJ2("array0");
|
|
||||||
x3[1] = new JJ2("array1");
|
|
||||||
$classname loc1 = new $classname("first me");
|
|
||||||
|
|
||||||
// These just show what output should look like
|
|
||||||
System.out.println("x1 = " + x1);
|
|
||||||
System.out.println("x2 = " + x2);
|
|
||||||
System.out.println("x3.toString = " + x3.toString());
|
|
||||||
System.out.println("x4.toString = " + x4.toString());
|
|
||||||
|
|
||||||
// Dont want to call growit since it would change
|
|
||||||
// the value.
|
|
||||||
|
|
||||||
System.out.println("loc1 = " + loc1);
|
|
||||||
System.out.println("-" + loc1);
|
|
||||||
loc1.gus();
|
|
||||||
}
|
|
||||||
|
|
||||||
// This does not have a toString method
|
|
||||||
static class JJ1 {
|
|
||||||
String me;
|
|
||||||
|
|
||||||
JJ1(String whoAmI) {
|
|
||||||
me = whoAmI;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// This has a toString method
|
|
||||||
static class JJ2 {
|
|
||||||
String me;
|
|
||||||
|
|
||||||
JJ2(String whoAmI) {
|
|
||||||
me = whoAmI;
|
|
||||||
}
|
|
||||||
public String toString() {
|
|
||||||
return me;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int meth1() {
|
|
||||||
return 89;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# This is called to feed cmds to jdb.
|
|
||||||
dojdbCmds()
|
|
||||||
{
|
|
||||||
setBkpts @1
|
|
||||||
runToBkpt @1
|
|
||||||
|
|
||||||
# Each print without the 'toString()' should print the
|
|
||||||
# same thing as the following print with the toString().
|
|
||||||
# The print 1s are just spacers
|
|
||||||
|
|
||||||
cmd print $classname.x1
|
|
||||||
cmd print "$classname.x1.toString()"
|
|
||||||
cmd print 1
|
|
||||||
|
|
||||||
cmd print $classname.x2
|
|
||||||
cmd print "$classname.x2.toString()"
|
|
||||||
cmd print 1
|
|
||||||
|
|
||||||
# An unreported bug: this isn't handled correctly.
|
|
||||||
# If we uncomment this line, we will get an 'instance of...' line
|
|
||||||
# which will cause the test to fail.
|
|
||||||
#cmd print "(Object)($classname.x3)"
|
|
||||||
cmd print "((Object)$classname.x3).toString()"
|
|
||||||
cmd print 1
|
|
||||||
|
|
||||||
cmd print $classname.x4
|
|
||||||
cmd print "$classname.x4.toString()"
|
|
||||||
cmd print 1
|
|
||||||
|
|
||||||
# Make sure jdb doesn't call a method multiple times.
|
|
||||||
cmd print "$classname.growit(\"xyz\")"
|
|
||||||
cmd eval "$classname.sbGrower.append(\"xyz\")"
|
|
||||||
cmd print 1
|
|
||||||
|
|
||||||
cmd eval "sbTim.toString()"
|
|
||||||
cmd print 1
|
|
||||||
|
|
||||||
cmd print this
|
|
||||||
cmd print "this.toString()"
|
|
||||||
cmd print 1
|
|
||||||
|
|
||||||
# A possible bug is that this ends up with multiple "s
|
|
||||||
cmd print '"--" + '$classname.x1
|
|
||||||
cmd print 1
|
|
||||||
|
|
||||||
# This too
|
|
||||||
cmd print "$classname.x4 + 2"
|
|
||||||
cmd print 1
|
|
||||||
|
|
||||||
cmd print "this.ivar"
|
|
||||||
cmd print gusLoc
|
|
||||||
cmd print 1
|
|
||||||
}
|
|
||||||
|
|
||||||
mysetup()
|
|
||||||
{
|
|
||||||
if [ -z "$TESTSRC" ] ; then
|
|
||||||
TESTSRC=.
|
|
||||||
fi
|
|
||||||
|
|
||||||
for ii in . $TESTSRC $TESTSRC/.. ; do
|
|
||||||
if [ -r "$ii/ShellScaffold.sh" ] ; then
|
|
||||||
. $ii/ShellScaffold.sh
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# You could replace this next line with the contents
|
|
||||||
# of ShellScaffold.sh and this script will run just the same.
|
|
||||||
mysetup
|
|
||||||
|
|
||||||
runit
|
|
||||||
jdbFailIfPresent '""'
|
|
||||||
jdbFailIfPresent 'instance of'
|
|
||||||
jdbFailIfPresent 'xyzxyz'
|
|
||||||
pass
|
|
93
test/jdk/com/sun/jdi/WatchFramePop.java
Normal file
93
test/jdk/com/sun/jdi/WatchFramePop.java
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2002, 2018, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 4546478
|
||||||
|
* @summary Enabling a watchpoint can kill following NotifyFramePops
|
||||||
|
* @comment converted from test/jdk/com/sun/jdi/WatchFramePop.sh
|
||||||
|
*
|
||||||
|
* @library /test/lib
|
||||||
|
* @run main/othervm WatchFramePop
|
||||||
|
*/
|
||||||
|
|
||||||
|
import jdk.test.lib.process.OutputAnalyzer;
|
||||||
|
import lib.jdb.JdbCommand;
|
||||||
|
import lib.jdb.JdbTest;
|
||||||
|
|
||||||
|
class WatchFramePopTarg {
|
||||||
|
int watchMe;
|
||||||
|
static public void main(String[] args) {
|
||||||
|
System.out.println("In Main");
|
||||||
|
WatchFramePopTarg mine = new WatchFramePopTarg();
|
||||||
|
mine.a1();
|
||||||
|
System.out.println("Test completed");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a1() {
|
||||||
|
a2(); // @1 breakpoint. We'll do a watch of watchMe here
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a2() {
|
||||||
|
System.out.println("in a2");
|
||||||
|
a3();
|
||||||
|
} // line 18
|
||||||
|
|
||||||
|
public void a3() {
|
||||||
|
System.out.println("in a3"); // After the watch, we'll run to here, line 21
|
||||||
|
a4(); // We'll do a 'next' to here. The failure is that this
|
||||||
|
} // runs to completion, or asserts with java_g
|
||||||
|
|
||||||
|
public void a4() {
|
||||||
|
System.out.println("in a4");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class WatchFramePop extends JdbTest {
|
||||||
|
public static void main(String argv[]) {
|
||||||
|
new WatchFramePop().run();
|
||||||
|
}
|
||||||
|
|
||||||
|
private WatchFramePop() {
|
||||||
|
super(DEBUGGEE_CLASS, SOURCE_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final String DEBUGGEE_CLASS = WatchFramePopTarg.class.getName();
|
||||||
|
private static final String SOURCE_FILE = "WatchFramePop.java";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runCases() {
|
||||||
|
setBreakpoints(1);
|
||||||
|
jdb.command(JdbCommand.run());
|
||||||
|
jdb.command(JdbCommand.watch(DEBUGGEE_CLASS, "watchMe"));
|
||||||
|
jdb.command(JdbCommand.stopIn(DEBUGGEE_CLASS, "a3"));
|
||||||
|
jdb.command(JdbCommand.cont()); // stops at the bkpt
|
||||||
|
jdb.command(JdbCommand.next()); // The bug is that this next runs to completion
|
||||||
|
// In which case, so does jdb
|
||||||
|
// so we never get here.
|
||||||
|
|
||||||
|
new OutputAnalyzer(jdb.getJdbOutput())
|
||||||
|
.shouldNotContain("The application exited");
|
||||||
|
}
|
||||||
|
}
|
@ -1,110 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright (c) 2002, 2014, 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
# @test
|
|
||||||
# @bug 4546478
|
|
||||||
# @summary Enabling a watchpoint can kill following NotifyFramePops
|
|
||||||
# @author Jim Holmlund
|
|
||||||
#
|
|
||||||
# @run shell WatchFramePop.sh
|
|
||||||
|
|
||||||
# These are variables that can be set to control execution
|
|
||||||
|
|
||||||
#pkg=untitled7
|
|
||||||
#classname=Untitled3
|
|
||||||
#compileOptions=-g
|
|
||||||
#java="java_g"
|
|
||||||
|
|
||||||
createJavaFile()
|
|
||||||
{
|
|
||||||
cat <<EOF > $1.java.1
|
|
||||||
|
|
||||||
public class $1 {
|
|
||||||
int watchMe;
|
|
||||||
static public void main(String[] args) {
|
|
||||||
System.out.println("In Main");
|
|
||||||
$1 mine = new $1();
|
|
||||||
mine.a1();
|
|
||||||
System.out.println("Test completed");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void a1() {
|
|
||||||
a2(); // @1 breakpoint. We'll do a watch of watchMe here
|
|
||||||
}
|
|
||||||
|
|
||||||
public void a2() {
|
|
||||||
System.out.println("in a2");
|
|
||||||
a3();
|
|
||||||
} // line 18
|
|
||||||
|
|
||||||
public void a3() {
|
|
||||||
System.out.println("in a3"); // After the watch, we'll run to here, line 21
|
|
||||||
a4(); // We'll do a 'next' to here. The failure is that this
|
|
||||||
} // runs to completion, or asserts with java_g
|
|
||||||
|
|
||||||
|
|
||||||
public void a4() {
|
|
||||||
System.out.println("in a4");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# drive jdb by sending cmds to it and examining its output
|
|
||||||
dojdbCmds()
|
|
||||||
{
|
|
||||||
setBkpts @1
|
|
||||||
runToBkpt @1
|
|
||||||
cmd watch shtest.watchMe
|
|
||||||
cmd stop in shtest.a3 # bkpt at line 17
|
|
||||||
contToBkpt # stops at the bkpt at
|
|
||||||
cmd next # The bug is that this next runs to completion
|
|
||||||
# In which case, so does jdb
|
|
||||||
# so we never get here.
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
mysetup()
|
|
||||||
{
|
|
||||||
if [ -z "$TESTSRC" ] ; then
|
|
||||||
TESTSRC=.
|
|
||||||
fi
|
|
||||||
|
|
||||||
for ii in . $TESTSRC $TESTSRC/.. ; do
|
|
||||||
if [ -r "$ii/ShellScaffold.sh" ] ; then
|
|
||||||
. $ii/ShellScaffold.sh
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# You could replace this next line with the contents
|
|
||||||
# of ShellScaffold.sh and this script will run just the same.
|
|
||||||
mysetup
|
|
||||||
|
|
||||||
runit
|
|
||||||
jdbFailIfPresent 'The application exited'
|
|
||||||
pass
|
|
Loading…
Reference in New Issue
Block a user