test/jdk/com/sun/jdi/DeferredStepTest.sh
branchJDK-8200758-branch
changeset 56949 b06759b804fc
parent 56948 60e53f98dac0
parent 52065 dea8a62cdfc3
child 56957 2f01969ed7cb
equal deleted inserted replaced
56948:60e53f98dac0 56949:b06759b804fc
     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
       
    44 classname=DeferredStepTest
       
    45 #compileOptions=-g
       
    46 #java=java_g
       
    47 #mode=-Xcomp
       
    48 
       
    49 createJavaFile()
       
    50 {
       
    51     cat <<EOF > $classname.java.1
       
    52 public 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 /****************************
       
    90 To 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 
       
   102 EOF
       
   103 }
       
   104 
       
   105 #sleepcmd="sleep 2"
       
   106 
       
   107 # This is called to feed cmds to jdb.
       
   108 dojdbCmds()
       
   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 
       
   134 mysetup()
       
   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.
       
   151 mysetup
       
   152 
       
   153 cat <<EOF
       
   154 ****************************************************************
       
   155 This test should be run and checked manually.
       
   156 
       
   157 If this works right, you should see StepEvents/Breakpoint events for lines
       
   158    8, 9, 6, 7, 8, 9, 6, ....   for thread jj11
       
   159 and
       
   160   20, 21, 18, 19, 20, 21, 18, ... for thread jj2
       
   161 
       
   162 Since both threads are running at the same time, these
       
   163 events can be intermixed.
       
   164 
       
   165 The bug is that you will frequently see step events missing.
       
   166 EG, you will see
       
   167   8, 9, 8
       
   168 or
       
   169   20, 21, 20, 21
       
   170 etc
       
   171 
       
   172 ============================================================
       
   173 At some point you might get the msg 'Nothing suspended'
       
   174 This is bug:
       
   175    4619349 Step Over fails in a multi threaded debuggee
       
   176 
       
   177 Kill the test and rerun it if this happens.
       
   178 ****************************************************************
       
   179 
       
   180 EOF
       
   181 runit
       
   182 #jdbFailIfPresent "Nothing suspended"
       
   183 #pass