0N/A#!/bin/sh
0N/A
0N/A#
2362N/A# Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
0N/A# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A#
0N/A# This code is free software; you can redistribute it and/or modify it
0N/A# under the terms of the GNU General Public License version 2 only, as
0N/A# published by the Free Software Foundation.
0N/A#
0N/A# This code is distributed in the hope that it will be useful, but WITHOUT
0N/A# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A# version 2 for more details (a copy is included in the LICENSE file that
0N/A# accompanied this code).
0N/A#
0N/A# You should have received a copy of the GNU General Public License version
0N/A# 2 along with this work; if not, write to the Free Software Foundation,
0N/A# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A#
2362N/A# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A# or visit www.oracle.com if you need additional information or have any
2362N/A# questions.
0N/A#
0N/A
0N/A# @ test
0N/A# This is a manual test. The script isn't smart enough
0N/A# to detect the correct ordering of the output since it
0N/A# is produced by multiple threads and can be interleaved
0N/A# in many different ways.
0N/A#
0N/A# @bug 4629548
0N/A# @summary Deferred StepRequests are lost in multithreaded debuggee
0N/A# @author Jim Holmlund
0N/A#
0N/A# @run shell/manual DeferredStepTest.sh
0N/A
0N/A# Run this script to see the bug. See comments at the end
0N/A# of the .java file for info on what the bug looks like.
0N/A
0N/A# These are variables that can be set to control execution
0N/A
0N/A#pkg=untitled7
0N/Aclassname=DeferredStepTest
0N/A#compileOptions=-g
0N/A#java=java_g
0N/A#mode=-Xcomp
0N/A
0N/AcreateJavaFile()
0N/A{
0N/A cat <<EOF > $classname.java.1
0N/Apublic class $classname {
0N/A static class jj1 implements Runnable {
0N/A public void run() {
0N/A int count = 0;
0N/A
0N/A for ( int ii = 0; ii < 10; ii++) { // line 6
0N/A int intInPotato04 = 666; // line 7
0N/A ++count; // line 8; @1 breakpoint
0N/A System.out.println("Thread: " + Thread.currentThread().getName()); // line 9
0N/A }
0N/A }
0N/A }
0N/A
0N/A static class jj2 implements Runnable {
0N/A public void run() {
0N/A int count2 = 0;
0N/A
0N/A for (int ii = 0; ii < 10; ii++) { // line 18
0N/A String StringInPotato05 = "I am"; // line 19
0N/A ++count2; // line 20; @1 breakpoint
0N/A System.out.println("Thread: " + Thread.currentThread().getName()); // line 21
0N/A }
0N/A }
0N/A }
0N/A
0N/A public static void main(String argv[]) {
0N/A System.out.println("Version = " + System.getProperty("java.version"));
0N/A
0N/A jj1 aRP = new jj1();
0N/A jj2 asRP = new jj2();
0N/A new Thread(aRP, "jj1 *").start();
0N/A new Thread(asRP, "jj2 **").start();
0N/A// new Thread(aRP, "jj3 ***").start();
0N/A// new Thread(asRP, "jj4 ****").start();
0N/A }
0N/A}
0N/A
0N/A/****************************
0N/ATo see this bug, do this
0N/A
0N/A jdb DeferredStep
0N/A stop at DeferredStepTest$jj1:8
0N/A stop at DeferredStepTest$jj2:20
0N/A run
0N/A next
0N/A next
0N/A :
0N/A
0N/A********/
0N/A
0N/AEOF
0N/A}
0N/A
0N/A#sleepcmd="sleep 2"
0N/A
0N/A# This is called to feed cmds to jdb.
0N/AdojdbCmds()
0N/A{
0N/A #set -x
0N/A # We can't use setBkpts because it can only set bkpts in one class :-(
0N/A #setBkpts @1
0N/A cmd stop at $classname'$jj1:8'
0N/A cmd stop at $classname'$jj2:20'
0N/A #cmd run; $sleepcmd
0N/A runToBkpt @1
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd next; $sleepcmd
0N/A cmd quit
0N/A}
0N/A
0N/Amysetup()
0N/A{
0N/A if [ -z "$TESTSRC" ] ; then
0N/A TESTSRC=.
0N/A fi
0N/A
0N/A for ii in . $TESTSRC $TESTSRC/.. ; do
0N/A if [ -r "$ii/ShellScaffold.sh" ] ; then
0N/A . $ii/ShellScaffold.sh
0N/A break
0N/A fi
0N/A done
0N/A}
0N/A
0N/A
0N/A# You could replace this next line with the contents
0N/A# of ShellScaffold.sh and this script will run just the same.
0N/Amysetup
0N/A
0N/Acat <<EOF
0N/A****************************************************************
0N/AThis test should be run and checked manually.
0N/A
0N/AIf this works right, you should see StepEvents/Breakpoint events for lines
0N/A 8, 9, 6, 7, 8, 9, 6, .... for thread jj11
0N/Aand
0N/A 20, 21, 18, 19, 20, 21, 18, ... for thread jj2
0N/A
0N/ASince both threads are running at the same time, these
0N/Aevents can be intermixed.
0N/A
0N/AThe bug is that you will frequently see step events missing.
0N/AEG, you will see
0N/A 8, 9, 8
0N/Aor
0N/A 20, 21, 20, 21
0N/Aetc
0N/A
0N/A============================================================
0N/AAt some point you might get the msg 'Nothing suspended'
0N/AThis is bug:
0N/A 4619349 Step Over fails in a multi threaded debuggee
0N/A
0N/AKill the test and rerun it if this happens.
0N/A****************************************************************
0N/A
0N/AEOF
0N/Arunit
0N/A#jdbFailIfPresent "Nothing suspended"
0N/A#pass