185 lines
4.8 KiB
Bash
185 lines
4.8 KiB
Bash
#!/bin/sh
|
|
|
|
#
|
|
# Copyright 2002 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
|
# CA 95054 USA or visit www.sun.com if you need additional information or
|
|
# have any questions.
|
|
#
|
|
|
|
# @ test
|
|
# This is a manual test. The script isn't smart enough
|
|
# to detect the correct ordering of the output since it
|
|
# is produced by multiple threads and can be interleaved
|
|
# in many different ways.
|
|
#
|
|
# @bug 4629548
|
|
# @summary Deferred StepRequests are lost in multithreaded debuggee
|
|
# @author Jim Holmlund
|
|
#
|
|
# @run shell/manual DeferredStepTest.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=DeferredStepTest
|
|
#compileOptions=-g
|
|
#java=java_g
|
|
#mode=-Xcomp
|
|
|
|
createJavaFile()
|
|
{
|
|
cat <<EOF > $classname.java.1
|
|
public class $classname {
|
|
static class jj1 implements Runnable {
|
|
public void run() {
|
|
int count = 0;
|
|
|
|
for ( int ii = 0; ii < 10; ii++) { // line 6
|
|
int intInPotato04 = 666; // line 7
|
|
++count; // line 8; @1 breakpoint
|
|
System.out.println("Thread: " + Thread.currentThread().getName()); // line 9
|
|
}
|
|
}
|
|
}
|
|
|
|
static class jj2 implements Runnable {
|
|
public void run() {
|
|
int count2 = 0;
|
|
|
|
for (int ii = 0; ii < 10; ii++) { // line 18
|
|
String StringInPotato05 = "I am"; // line 19
|
|
++count2; // line 20; @1 breakpoint
|
|
System.out.println("Thread: " + Thread.currentThread().getName()); // line 21
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void main(String argv[]) {
|
|
System.out.println("Version = " + System.getProperty("java.version"));
|
|
|
|
jj1 aRP = new jj1();
|
|
jj2 asRP = new jj2();
|
|
new Thread(aRP, "jj1 *").start();
|
|
new Thread(asRP, "jj2 **").start();
|
|
// new Thread(aRP, "jj3 ***").start();
|
|
// new Thread(asRP, "jj4 ****").start();
|
|
}
|
|
}
|
|
|
|
/****************************
|
|
To see this bug, do this
|
|
|
|
jdb DeferredStep
|
|
stop at DeferredStepTest$jj1:8
|
|
stop at DeferredStepTest$jj2:20
|
|
run
|
|
next
|
|
next
|
|
:
|
|
|
|
********/
|
|
|
|
EOF
|
|
}
|
|
|
|
#sleepcmd="sleep 2"
|
|
|
|
# This is called to feed cmds to jdb.
|
|
dojdbCmds()
|
|
{
|
|
#set -x
|
|
# We can't use setBkpts because it can only set bkpts in one class :-(
|
|
#setBkpts @1
|
|
cmd stop at $classname'$jj1:8'
|
|
cmd stop at $classname'$jj2:20'
|
|
#cmd run; $sleepcmd
|
|
runToBkpt @1
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd next; $sleepcmd
|
|
cmd quit
|
|
}
|
|
|
|
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
|
|
|
|
cat <<EOF
|
|
****************************************************************
|
|
This test should be run and checked manually.
|
|
|
|
If this works right, you should see StepEvents/Breakpoint events for lines
|
|
8, 9, 6, 7, 8, 9, 6, .... for thread jj11
|
|
and
|
|
20, 21, 18, 19, 20, 21, 18, ... for thread jj2
|
|
|
|
Since both threads are running at the same time, these
|
|
events can be intermixed.
|
|
|
|
The bug is that you will frequently see step events missing.
|
|
EG, you will see
|
|
8, 9, 8
|
|
or
|
|
20, 21, 20, 21
|
|
etc
|
|
|
|
============================================================
|
|
At some point you might get the msg 'Nothing suspended'
|
|
This is bug:
|
|
4619349 Step Over fails in a multi threaded debuggee
|
|
|
|
Kill the test and rerun it if this happens.
|
|
****************************************************************
|
|
|
|
EOF
|
|
runit
|
|
#jdbFailIfPresent "Nothing suspended"
|
|
#pass
|