DeferredStepTest.sh revision 17113:d17577d4839b
118334Speter#!/bin/sh 218334Speter 390075Sobrien# 4132718Skan# Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. 518334Speter# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 690075Sobrien# 718334Speter# This code is free software; you can redistribute it and/or modify it 890075Sobrien# under the terms of the GNU General Public License version 2 only, as 990075Sobrien# published by the Free Software Foundation. 1090075Sobrien# 1190075Sobrien# This code is distributed in the hope that it will be useful, but WITHOUT 1218334Speter# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1390075Sobrien# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1490075Sobrien# version 2 for more details (a copy is included in the LICENSE file that 1590075Sobrien# accompanied this code). 1690075Sobrien# 1718334Speter# You should have received a copy of the GNU General Public License version 1818334Speter# 2 along with this work; if not, write to the Free Software Foundation, 1990075Sobrien# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2090075Sobrien# 2190075Sobrien# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2218334Speter# or visit www.oracle.com if you need additional information or have any 23132718Skan# questions. 24132718Skan# 25132718Skan 2690075Sobrien# @ test 27132718Skan# This is a manual test. The script isn't smart enough 2890075Sobrien# to detect the correct ordering of the output since it 2918334Speter# is produced by multiple threads and can be interleaved 30132718Skan# in many different ways. 3118334Speter# 3218334Speter# @bug 4629548 3318334Speter# @summary Deferred StepRequests are lost in multithreaded debuggee 34132718Skan# @author Jim Holmlund 3518334Speter# 3618334Speter# @run shell/manual DeferredStepTest.sh 3718334Speter 38132718Skan# Run this script to see the bug. See comments at the end 3918334Speter# of the .java file for info on what the bug looks like. 4090075Sobrien 4118334Speter# These are variables that can be set to control execution 4218334Speter 43132718Skan#pkg=untitled7 4418334Speterclassname=DeferredStepTest 4518334Speter#compileOptions=-g 46132718Skan#java=java_g 4718334Speter#mode=-Xcomp 4818334Speter 4918334SpetercreateJavaFile() 50132718Skan{ 5118334Speter cat <<EOF > $classname.java.1 5218334Speterpublic class $classname { 5318334Speter static class jj1 implements Runnable { 54132718Skan public void run() { 5518334Speter int count = 0; 5618334Speter 5718334Speter for ( int ii = 0; ii < 10; ii++) { // line 6 5818334Speter int intInPotato04 = 666; // line 7 5918334Speter ++count; // line 8; @1 breakpoint 6018334Speter System.out.println("Thread: " + Thread.currentThread().getName()); // line 9 61132718Skan } 6218334Speter } 6318334Speter } 6418334Speter 6518334Speter static class jj2 implements Runnable { 66132718Skan public void run() { 6718334Speter int count2 = 0; 6818334Speter 69132718Skan for (int ii = 0; ii < 10; ii++) { // line 18 7018334Speter String StringInPotato05 = "I am"; // line 19 7118334Speter ++count2; // line 20; @1 breakpoint 7218334Speter System.out.println("Thread: " + Thread.currentThread().getName()); // line 21 7318334Speter } 74132718Skan } 7518334Speter } 7618334Speter 7718334Speter public static void main(String argv[]) { 78132718Skan System.out.println("Version = " + System.getProperty("java.version")); 7918334Speter 8018334Speter jj1 aRP = new jj1(); 8118334Speter jj2 asRP = new jj2(); 82132718Skan new Thread(aRP, "jj1 *").start(); 8318334Speter new Thread(asRP, "jj2 **").start(); 8418334Speter// new Thread(aRP, "jj3 ***").start(); 8518334Speter// new Thread(asRP, "jj4 ****").start(); 86132718Skan } 8718334Speter} 8850397Sobrien 8950397Sobrien/**************************** 9050397SobrienTo see this bug, do this 91132718Skan 9250397Sobrien jdb DeferredStep 9352284Sobrien stop at DeferredStepTest$jj1:8 9452284Sobrien stop at DeferredStepTest$jj2:20 95132718Skan run 9652284Sobrien next 9718334Speter next 98132718Skan : 9918334Speter 10018334Speter********/ 10118334Speter 102132718SkanEOF 10318334Speter} 10418334Speter 10518334Speter#sleepcmd="sleep 2" 10618334Speter 107132718Skan# This is called to feed cmds to jdb. 10818334SpeterdojdbCmds() 10918334Speter{ 11018334Speter #set -x 111132718Skan # We can't use setBkpts because it can only set bkpts in one class :-( 112132718Skan #setBkpts @1 113132718Skan cmd stop at $classname'$jj1:8' 114132718Skan cmd stop at $classname'$jj2:20' 115132718Skan #cmd run; $sleepcmd 116132718Skan runToBkpt @1 117132718Skan cmd next; $sleepcmd 118132718Skan cmd next; $sleepcmd 119132718Skan cmd next; $sleepcmd 12018334Speter cmd next; $sleepcmd 121132718Skan cmd next; $sleepcmd 122132718Skan cmd next; $sleepcmd 123132718Skan cmd next; $sleepcmd 12418334Speter cmd next; $sleepcmd 12518334Speter cmd next; $sleepcmd 126132718Skan cmd next; $sleepcmd 12718334Speter cmd next; $sleepcmd 12818334Speter cmd next; $sleepcmd 129132718Skan cmd next; $sleepcmd 13018334Speter cmd next; $sleepcmd 131117395Skan cmd next; $sleepcmd 13290075Sobrien} 13390075Sobrien 134132718Skanmysetup() 13590075Sobrien{ 13618334Speter if [ -z "$TESTSRC" ] ; then 13718334Speter TESTSRC=. 138132718Skan fi 13918334Speter 14018334Speter for ii in . $TESTSRC $TESTSRC/.. ; do 14118334Speter if [ -r "$ii/ShellScaffold.sh" ] ; then 142132718Skan . $ii/ShellScaffold.sh 14350397Sobrien break 14490075Sobrien fi 145132718Skan done 14690075Sobrien} 14790075Sobrien 14890075Sobrien 149132718Skan# You could replace this next line with the contents 15090075Sobrien# of ShellScaffold.sh and this script will run just the same. 15150397Sobrienmysetup 152132718Skan 153132718Skancat <<EOF 154132718Skan**************************************************************** 155132718SkanThis test should be run and checked manually. 156132718Skan 157132718SkanIf this works right, you should see StepEvents/Breakpoint events for lines 158132718Skan 8, 9, 6, 7, 8, 9, 6, .... for thread jj11 15918334Speterand 16018334Speter 20, 21, 18, 19, 20, 21, 18, ... for thread jj2 16118334Speter 16218334SpeterSince both threads are running at the same time, these 163132718Skanevents can be intermixed. 16418334Speter 16518334SpeterThe bug is that you will frequently see step events missing. 166132718SkanEG, you will see 16718334Speter 8, 9, 8 16818334Speteror 16918334Speter 20, 21, 20, 21 170132718Skanetc 17118334Speter 17290075Sobrien============================================================ 173132718SkanAt some point you might get the msg 'Nothing suspended' 17418334SpeterThis is bug: 17590075Sobrien 4619349 Step Over fails in a multi threaded debuggee 176132718Skan 17750397SobrienKill the test and rerun it if this happens. 17850397Sobrien**************************************************************** 17990075Sobrien 180132718SkanEOF 18190075Sobrienrunit 18290075Sobrien#jdbFailIfPresent "Nothing suspended" 18390075Sobrien#pass 184132718Skan