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