+1

--alex

On 10/17/2018 18:53, JC Beyler wrote:
Hi Daniil,

It looks good to me.

I noticed a tiny nit in TTY.java where you removed an empty line (l171)

Thanks!
Jc


On Wed, Oct 17, 2018 at 5:50 PM Daniil Titov <daniil.x.ti...@oracle.com <mailto:daniil.x.ti...@oracle.com>> wrote:

    Hi Chris, Alex and JC,

    I created a separate issue to deal with "non-atomic" jdb output at
    https://bugs.openjdk.java.net/browse/JDK-8212626 .

    Please review an updated fix that includes the changes Alex suggested.

    Webrev: http://cr.openjdk.java.net/~dtitov/8211736/webrev.04
    <http://cr.openjdk.java.net/%7Edtitov/8211736/webrev.04>
    Issue: https://bugs.openjdk.java.net/browse/JDK-8211736

    Thanks!
    --Daniil


    On 10/17/18, 5:06 PM, "Daniil Titov" <daniil.x.ti...@oracle.com
    <mailto:daniil.x.ti...@oracle.com>> wrote:

         Hi Chris,

         The previous email was accidentally fired before I managed to
    type anything in. Sorry for confusion.

         Jdb constantly reads new commands from System.in despite
    whether the breakpoint is hit and/or the prompt is printed.

         cat -n
    src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTY.java

         786             // Process interactive commands.
            787                  MessageOutput.printPrompt();
            788                  while (true) {
            789                      String ln = in.readLine();
            790                      if (ln == null) {
            791                          /*
            792                           *  Jdb is being shutdown
    because debuggee exited, ignore any 'null'
            793                           *  returned by readLine()
    during shutdown. JDK-8154144.
            794                           */
            795                          if (!isShuttingDown()) {
       796 MessageOutput.println("Input stream closed.");
            797                          }
            798                          ln = "quit";
            799                      }
            800
            801                      if (ln.startsWith("!!") && lastLine
    != null) {
            802                          ln = lastLine + ln.substring(2);
       803 MessageOutput.printDirectln(ln);// Special case: use printDirectln()
            804                      }
            805
            806                      StringTokenizer t = new
    StringTokenizer(ln);
            807                      if (t.hasMoreTokens()) {
            808                          lastLine = ln;
            809                          executeCommand(t);
            810                      } else {
            811                          MessageOutput.printPrompt();
            812                      }
            813                  }
            814              } catch (VMDisconnectedException e) {
            815                  handler.handleDisconnectedException();
            816              }

         Below is a sample debug session for the following test class
    that sends commands "threads" and "quit"
         1   public class LoopTest {
              2          public static void main(String[] args) throws
    Exception {
              3              Thread thread = Thread.currentThread();
              4              while(true) {
              5                  print(thread);
              6                  Thread.sleep(5000);
              7              }
              8          }
              9
             10          public static void print(Object obj) {
             11              //System.out.println(obj);
             12          }
             13      }

         datitov-mac:work datitov$
    ~/src/jdk-hs/build/macosx-x64-debug/images/jdk/bin/jdb LoopTest
         Initializing jdb ...
         > stop go at LoopTest:6
         Deferring breakpoint LoopTest:6.
         It will be set after the class is loaded.
         > run
         run LoopTest
         Set uncaught java.lang.Throwable
         Set deferred uncaught java.lang.Throwable
         >
         VM Started: Set deferred breakpoint LoopTest:6

         Breakpoint hit: "thread=main", LoopTest.main(), line=6 bci=8
         6                Thread.sleep(5000);

         Breakpoint hit: "thread=main", LoopTest.main(), line=6 bci=8
         6                Thread.sleep(5000);
         threads
         Group system:
           (java.lang.ref.Reference$ReferenceHandler)0x172 Reference
    Handler running
      (java.lang.ref.Finalizer$FinalizerThread)0x173  Finalizer      cond. waiting
           (java.lang.Thread)0x174                         Signal
    Dispatcher running
         Group main:
      (java.lang.Thread)0x1                           main     sleeping
         Group InnocuousThreadGroup:
      (jdk.internal.misc.InnocuousThread)0x197 Common-Cleaner    cond. waiting
         >
         Breakpoint hit: "thread=main", LoopTest.main(), line=6 bci=8
         6                Thread.sleep(5000);

         Breakpoint hit: "thread=main", LoopTest.main(), line=6 bci=8
         6                Thread.sleep(5000);
         quit
         Breakpoint hit: "thread=main", LoopTest.main(), line=6 bci=8
         6                Thread.sleep(5000);

         datitov-mac:work datitov$

         I think we could print a simple prompt in this case as Alex
    suggested.

         Best regards,
         Daniil

         On 10/17/18, 3:52 PM, "Chris Plummer"
    <chris.plum...@oracle.com <mailto:chris.plum...@oracle.com>> wrote:

             What is the jdb state for a breakpoint with SUSPEND_NONE?
    Can you
             actually type in commands even though no threads are suspended?

             Chris

             On 10/17/18 3:31 PM, Alex Menkov wrote:
             > Hi Daniil, Chris,
             >
             > As far as I understand, the fix does not completely fixes
    all
             > "non-atomic" output issues (at least TTY.executeCommand
    still prints
             > prompt separately), so I agree that handle it as separate
    issue would
             > be better.
             > Unfortunately I don't know Gary's ideas for the issue.
             >
             > About the fix for print prompt:
             > 1) TTY.java:
             > +            // Print current location if suspend policy
    is SUSPEND_NONE
             > I suppose you mean "Print breakpoint location"
             >
             > 2) Does it make sense to use printCurrentLocation for
             > SUSPEND_EVENT_THREAD?
             > Is it expected to print something different from
    printBreakpointLocation?
             >
             > 3) I don't quite understand why we don't print simple
    prompt for
             > SUSPEND_NONE. IIUC jdb can accept new command in both
             > SUSPEND_EVENT_THREAD and SUSPEND_NONE cases (prompt shows
    that jdb
             > waits for next command, right?)
             >
             > 4) JdbStopThreadTest.java
             > New line line in Java regexp is "\\R"
             >
             > --alex
             >
             > On 10/17/2018 10:47, Chris Plummer wrote:
             >> Hi Alex,
             >>
             >> I think the tty buffering should be a separate bug fix,
    and I'd also
             >> like input from Gary on it since he had tried something
    similar at
             >> one point. It should probably also include a multithread
    test to
             >> prove the fix is working (after first getting the test
    to fail
             >> without the changes).
             >>
             >> thanks,
             >>
             >> Chris
             >>
             >> On 10/16/18 8:59 PM, Daniil Titov wrote:
             >>> Hi Alex, Chris and JC,
             >>>
             >>> Please review an updated version of the patch that
    addresses these
             >>> issues.
             >>>
             >>> Webrev:
    http://cr.openjdk.java.net/~dtitov/8211736/webrev.03/
    <http://cr.openjdk.java.net/%7Edtitov/8211736/webrev.03/>
             >>> Issue: https://bugs.openjdk.java.net/browse/JDK-8211736
             >>>
             >>> Thanks!
             >>> --Daniil
             >>>
             >>>
             >>> On 10/12/18, 9:52 AM, "Alex Menkov"
    <alexey.men...@oracle.com <mailto:alexey.men...@oracle.com>> wrote:
             >>>
             >>>      Hi Daniil,
             >>>      1) +1 for printCurrentLocation when suspendPolicy
    != SUSPEND_ALL
             >>>      2) wrong indent in JdbStopThreadTest.java:
             >>>         36         import lib.jdb.JdbCommand;
             >>>         37         import lib.jdb.JdbTest;
             >>>      3) I think it would be better to make
    waitForSimplePrompt
             >>> property of
             >>>      JdbCommand (like JdbCommand.allowExit)
             >>>      jdb.command(JdbCommand.run().replyIsSimplePrompt());
             >>>      looks much clearer than
             >>>      jdb.command(JdbCommand.run(), true);
             >>>      4) (TTY.java)
             >>>          MessageOutput.lnprint("Breakpoint hit:");
             >>>      +  // Print current location and prompt if suspend
    policy is
             >>>      SUSPEND_EVENT_THREAD.
             >>>      +  // In case of SUSPEND_ALL policy this is
    handled by
             >>> vmInterrupted()
             >>>      method.
             >>>      +  if (be.request().suspendPolicy() ==
             >>> EventRequest.SUSPEND_EVENT_THREAD) {
             >>>      +
    printCurrentLocation(ThreadInfo.getThreadInfo(be.thread()));
             >>>      +      MessageOutput.printPrompt();
             >>>      +  }
             >>>      We have 3 separate outputs.
             >>>      If we have several concurrent threads, we can easy
    get mess of
             >>> outputs
             >>>      from different threads.
             >>>      I think it would be better to print everything in
    a single chunk.
             >>>      I suppose TTY has other places with similar
    "non-atomic"
             >>> output, so
             >>>      maybe revising TTY output should be handled by
    separate issue.
             >>>      --alex
             >>>      On 10/11/2018 22:00, Chris Plummer wrote:
             >>>      > Hi Daniil,
             >>>      >
             >>>      > Can you send output from an example jdb session?
             >>>      >
             >>>      > Do you think maybe we should also call
    printCurrentLocation()
             >>> when the
             >>>      > suspend policy is NONE?
             >>>      >
             >>>      > There's a typo in the following line. The space
    is on the
             >>> wrong side of
             >>>      > the comma.
             >>>      >
             >>>      >    72
    jdb.command(JdbCommand.stopThreadAt(DEBUGGEE_CLASS
             >>> ,bpLine));
             >>>      >
             >>>      > thanks,
             >>>      >
             >>>      > Chris
             >>>      >
             >>>      > On 10/11/18 8:02 PM, Daniil Titov wrote:
             >>>      >>
             >>>      >> Thank you,  JC!
             >>>      >>
             >>>      >> Please review an updated version of the patch
    that fixes
             >>> newly added
             >>>      >> test for Windows platform  (now it uses system
    dependent line
             >>>      >> separator string).
             >>>      >>
             >>>      >>
    Webrev:http://cr.openjdk.java.net/~dtitov/8211736/webrev.02/
    <http://cr.openjdk.java.net/%7Edtitov/8211736/webrev.02/>
             >>>      >>
    <http://cr.openjdk.java.net/%7Edtitov/8211736/webrev.02/>
             >>>      >>
             >>>      >> Issue:
    https://bugs.openjdk.java.net/browse/JDK-8211736
             >>>      >>
             >>>      >> Best regards,
             >>>      >>
             >>>      >> --Daniil
             >>>      >>
             >>>      >> *From: *JC Beyler <jcbey...@google.com
    <mailto:jcbey...@google.com>>
             >>>      >> *Date: *Thursday, October 11, 2018 at 7:17 PM
             >>>      >> *To: *<daniil.x.ti...@oracle.com
    <mailto:daniil.x.ti...@oracle.com>>
             >>>      >> *Cc: *<serviceability-dev@openjdk.java.net
    <mailto:serviceability-dev@openjdk.java.net>>
             >>>      >> *Subject: *Re: RFR 8211736: jdb doesn't print
    prompt when
             >>> breakpoint
             >>>      >> is hit and suspend policy is STOP_EVENT_THREAD
             >>>      >>
             >>>      >> Hi Daniil,
             >>>      >>
             >>>      >> Looks good to me. I saw a really small nit:
             >>>      >>
             >>>      >>
             >>>
    
http://cr.openjdk.java.net/~dtitov/8211736/webrev.01/test/jdk/com/sun/jdi/JdbStopThreadTest.java.html
    
<http://cr.openjdk.java.net/%7Edtitov/8211736/webrev.01/test/jdk/com/sun/jdi/JdbStopThreadTest.java.html>

             >>>
             >>>      >>
             >>>
    
<http://cr.openjdk.java.net/%7Edtitov/8211736/webrev.01/test/jdk/com/sun/jdi/JdbStopThreadTest.java.html>

             >>>
             >>>      >>
             >>>      >> 70  jdb.command(JdbCommand.stopThreadAt(
    DEBUGGEE_CLASS
             >>> ,bpLine));
             >>>      >>
             >>>      >> There is a space after the '('.
             >>>      >>
             >>>      >> No need to send a new webrev for that evidently :),
             >>>      >>
             >>>      >> Jc
             >>>      >>
             >>>      >> On Thu, Oct 11, 2018 at 5:07 PM Daniil Titov
             >>>      >> <daniil.x.ti...@oracle.com
    <mailto:daniil.x.ti...@oracle.com>
             >>> <mailto:daniil.x.ti...@oracle.com
    <mailto:daniil.x.ti...@oracle.com>>> wrote:
             >>>      >>
             >>>      >>     Please review the change that fixes the
    issue with
             >>> missing prompt
             >>>      >>     in jdb when a breakpoint is hit and the
    suspend policy
             >>> is set to
             >>>      >>     stop the thread only.
             >>>      >>
             >>>      >>     Webrev:
             >>> http://cr.openjdk.java.net/~dtitov/8211736/webrev.01
    <http://cr.openjdk.java.net/%7Edtitov/8211736/webrev.01>
             >>>      >>
    <http://cr.openjdk.java.net/%7Edtitov/8211736/webrev.01>
             >>>      >>     Issue:
    https://bugs.openjdk.java.net/browse/JDK-8211736
             >>>      >>
             >>>      >>     Thanks!
             >>>      >>     --Daniil
             >>>      >>
             >>>      >>
             >>>      >>
             >>>      >> --
             >>>      >>
             >>>      >> Thanks,
             >>>      >>
             >>>      >> Jc
             >>>      >>
             >>>      >
             >>>
             >>>
             >>
             >>







--

Thanks,
Jc

Reply via email to