1#!/bin/sh 2 3# 4# Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. 5# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 6# 7# This code is free software; you can redistribute it and/or modify it 8# under the terms of the GNU General Public License version 2 only, as 9# published by the Free Software Foundation. 10# 11# This code is distributed in the hope that it will be useful, but WITHOUT 12# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14# version 2 for more details (a copy is included in the LICENSE file that 15# accompanied this code). 16# 17# You should have received a copy of the GNU General Public License version 18# 2 along with this work; if not, write to the Free Software Foundation, 19# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20# 21# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22# or visit www.oracle.com if you need additional information or have any 23# questions. 24# 25 26# @ test 27# This is a manual test. The script isn't smart enough 28# to detect the correct ordering of the output since it 29# is produced by multiple threads and can be interleaved 30# in many different ways. 31# 32# @bug 4629548 33# @summary Deferred StepRequests are lost in multithreaded debuggee 34# @author Jim Holmlund 35# 36# @run shell/manual DeferredStepTest.sh 37 38# Run this script to see the bug. See comments at the end 39# of the .java file for info on what the bug looks like. 40 41# These are variables that can be set to control execution 42 43#pkg=untitled7 44classname=DeferredStepTest 45#compileOptions=-g 46#java=java_g 47#mode=-Xcomp 48 49createJavaFile() 50{ 51 cat <<EOF > $classname.java.1 52public class $classname { 53 static class jj1 implements Runnable { 54 public void run() { 55 int count = 0; 56 57 for ( int ii = 0; ii < 10; ii++) { // line 6 58 int intInPotato04 = 666; // line 7 59 ++count; // line 8; @1 breakpoint 60 System.out.println("Thread: " + Thread.currentThread().getName()); // line 9 61 } 62 } 63 } 64 65 static class jj2 implements Runnable { 66 public void run() { 67 int count2 = 0; 68 69 for (int ii = 0; ii < 10; ii++) { // line 18 70 String StringInPotato05 = "I am"; // line 19 71 ++count2; // line 20; @1 breakpoint 72 System.out.println("Thread: " + Thread.currentThread().getName()); // line 21 73 } 74 } 75 } 76 77 public static void main(String argv[]) { 78 System.out.println("Version = " + System.getProperty("java.version")); 79 80 jj1 aRP = new jj1(); 81 jj2 asRP = new jj2(); 82 new Thread(aRP, "jj1 *").start(); 83 new Thread(asRP, "jj2 **").start(); 84// new Thread(aRP, "jj3 ***").start(); 85// new Thread(asRP, "jj4 ****").start(); 86 } 87} 88 89/**************************** 90To see this bug, do this 91 92 jdb DeferredStep 93 stop at DeferredStepTest$jj1:8 94 stop at DeferredStepTest$jj2:20 95 run 96 next 97 next 98 : 99 100********/ 101 102EOF 103} 104 105#sleepcmd="sleep 2" 106 107# This is called to feed cmds to jdb. 108dojdbCmds() 109{ 110 #set -x 111 # We can't use setBkpts because it can only set bkpts in one class :-( 112 #setBkpts @1 113 cmd stop at $classname'$jj1:8' 114 cmd stop at $classname'$jj2:20' 115 #cmd run; $sleepcmd 116 runToBkpt @1 117 cmd next; $sleepcmd 118 cmd next; $sleepcmd 119 cmd next; $sleepcmd 120 cmd next; $sleepcmd 121 cmd next; $sleepcmd 122 cmd next; $sleepcmd 123 cmd next; $sleepcmd 124 cmd next; $sleepcmd 125 cmd next; $sleepcmd 126 cmd next; $sleepcmd 127 cmd next; $sleepcmd 128 cmd next; $sleepcmd 129 cmd next; $sleepcmd 130 cmd next; $sleepcmd 131 cmd next; $sleepcmd 132} 133 134mysetup() 135{ 136 if [ -z "$TESTSRC" ] ; then 137 TESTSRC=. 138 fi 139 140 for ii in . $TESTSRC $TESTSRC/.. ; do 141 if [ -r "$ii/ShellScaffold.sh" ] ; then 142 . $ii/ShellScaffold.sh 143 break 144 fi 145 done 146} 147 148 149# You could replace this next line with the contents 150# of ShellScaffold.sh and this script will run just the same. 151mysetup 152 153cat <<EOF 154**************************************************************** 155This test should be run and checked manually. 156 157If this works right, you should see StepEvents/Breakpoint events for lines 158 8, 9, 6, 7, 8, 9, 6, .... for thread jj11 159and 160 20, 21, 18, 19, 20, 21, 18, ... for thread jj2 161 162Since both threads are running at the same time, these 163events can be intermixed. 164 165The bug is that you will frequently see step events missing. 166EG, you will see 167 8, 9, 8 168or 169 20, 21, 20, 21 170etc 171 172============================================================ 173At some point you might get the msg 'Nothing suspended' 174This is bug: 175 4619349 Step Over fails in a multi threaded debuggee 176 177Kill the test and rerun it if this happens. 178**************************************************************** 179 180EOF 181runit 182#jdbFailIfPresent "Nothing suspended" 183#pass 184