[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Re: PING: RFR: 8209790: SA tools not providing option to connect to debug server
From:       Yasumasa Suenaga <yasuenag () gmail ! com>
Date:       2019-06-25 23:35:57
Message-ID: CAGFVN2Amqk5hHenUhX2LF45_Z7qexYK-zRFU1+MY7CJdHZ+NSg () mail ! gmail ! com
[Download RAW message or body]

Thanks, Serguei!

Yasumasa


2019年6月25日(火) 17:35 serguei.spitsyn@oracle.com <serguei.spitsyn@oracle.com>:

> Hi Yasumasa,
> 
> The fix looks good to me.
> 
> Thanks,
> Serguei
> 
> 
> On 6/25/19 00:47, Yasumasa Suenaga wrote:
> > Hi,
> > 
> > This enhancement has been retargeted to 14, and the CSR has been
> approved.
> > I uploaded a webrev for 14. Could you review it?
> > 
> > http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.03/
> > 
> > It includes the fix to rename `--remote` to `--connect` that is
> > suggested in CSR.
> > It passed tests on submit repo.
> > 
> > 
> > Thanks,
> > 
> > Yasumasa
> > 
> > 
> > 2019年6月17日(月) 22:11 Yasumasa Suenaga <yasuenag@gmail.com>:
> > > Hi David,
> > > 
> > > On 2019/06/17 21:42, David Holmes wrote:
> > > > Hi Yasumasa,
> > > > 
> > > > On 17/06/2019 6:50 pm, Yasumasa Suenaga wrote:
> > > > > Hi David,
> > > > > 
> > > > > 8209790 is filed as a bug.
> > > > I don't agree this is a "bug" - sorry. For this to be a bug there must
> > > > be some specification of behaviour that the implementation is
> violating.
> > > > Is that the case? To me this is missing functionality which makes it an
> > > > enhancement.
> > > The feature for connecting to remote debug server has been provided JDK
> > > 8 or earlier. However it was missed since JDK 9. So I think we can
> > > handle it as a "bug".
> > > Anyway, I added jdk13-enhancement-request label to JBS. I'm waiting for
> > > the approval.
> > > 
> > > 
> > > > > According to [1], I think we can push the fix to jdk/jdk13. Does it
> > > > > correct?
> > > > > 
> > > > > I'm not sure which version (13 or 14) should be set on JBS before
> > > > > pushing.
> > > > Just to clarify the process here, you don't want to set the "Fix
> > > > Version" to 13 or 14 in JBS before pushing. That will be set based on
> > > > the repo you push to. If you push to jdk/jdk it will be 14. If you push
> > > > to jdk/jdk13 it will be 13. Any fix pushed to jdk/jdk13 will be
> > > > "automatically" forward-ported to jdk/jdk and thus 14.
> > > Thanks! I got it.
> > > 
> > > 
> > > Yasumasa
> > > 
> > > 
> > > > David
> > > > -----
> > > > 
> > > > > (Of course I will push it after the CSR is approved.)
> > > > > 
> > > > > 
> > > > > Thanks,
> > > > > 
> > > > > Yasumasa
> > > > > 
> > > > > 
> > > > > [1]
> http://mail.openjdk.java.net/pipermail/jdk-dev/2019-June/003051.html
> > > > > 
> > > > > 
> > > > > On 2019/06/17 17:06, David Holmes wrote:
> > > > > > Hi Yasumasa,
> > > > > > 
> > > > > > On 17/06/2019 8:52 am, Yasumasa Suenaga wrote:
> > > > > > > 2019年6月17日(月) 6:47 serguei.spitsyn@oracle.com
> > > > > > > <mailto:serguei.spitsyn@oracle.com> <serguei.spitsyn@oracle.com
> > > > > > > <mailto:serguei.spitsyn@oracle.com>>:
> > > > > > > 
> > > > > > > Forgot to tell...
> > > > > > > This can be pushed only after the CSR is approved.
> > > > > > > 
> > > > > > > 
> > > > > > > Sure!
> > > > > > > And I will push it when I get second reviewer.
> > > > > > > 
> > > > > > > BTW should I push this change to jdk/jdk? or push to jdk/jdk13
> > > > > > > manually?
> > > > > > JDK 13 has now entered RDP1 so if you want this to go into 13 it will
> > > > > > need special approval:
> > > > > > 
> > > > > > http://openjdk.java.net/jeps/3#Late-Enhancement-Request-Process
> > > > > > 
> > > > > > Otherwise push to jdk/jdk and it will be for JDK 14.
> > > > > > 
> > > > > > Cheers,
> > > > > > David
> > > > > > 
> > > > > > > Thanks,
> > > > > > > 
> > > > > > > Yasumasa
> > > > > > > 
> > > > > > > 
> > > > > > > 
> > > > > > > Thanks,
> > > > > > > Serguei
> > > > > > > 
> > > > > > > 
> > > > > > > On 6/16/19 14:44, serguei.spitsyn@oracle.com
> > > > > > > <mailto:serguei.spitsyn@oracle.com> wrote:
> > > > > > > > Hi Yasumasa,
> > > > > > > > 
> > > > > > > > 
> > > > > > > > On 6/16/19 07:22, Yasumasa Suenaga wrote:
> > > > > > > > > Hi Serguei,
> > > > > > > > > 
> > > > > > > > > > > > One minor suggestion is to use the final field
> NO_REMOTE
> > > > > > > instead
> > > > > > > > > > > > of null for initialization of the local variable
> "remote".
> > > > > > > > > 
> > > > > > > > > I fixed it on new webrev. Could you check again?
> > > > > > > > > 
> http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.02/
> > > > > > > > 
> > > > > > > > 
> > > > > > > > It looks good.
> > > > > > > > Thanks you for the update!
> > > > > > > > 
> > > > > > > > > 
> > > > > > > > > > > IMHO refactoring should be worked on another issue.
> > > > > > > > > > 
> > > > > > > > > > Agreed.
> > > > > > > > > 
> > > > > > > > > I filed it to JBS:
> > > > > > > > > https://bugs.openjdk.java.net/browse/JDK-8226204
> > > > > > > > 
> > > > > > > > Thank you for filing the enhancement!
> > > > > > > > 
> > > > > > > > Thanks.
> > > > > > > > Serguei
> > > > > > > > 
> > > > > > > > 
> > > > > > > > > Thanks,
> > > > > > > > > 
> > > > > > > > > Yasumasa
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > On 2019/06/15 15:10, serguei.spitsyn@oracle.com
> > > > > > > <mailto:serguei.spitsyn@oracle.com> wrote:
> > > > > > > > > > Hi Yasumasa,
> > > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > > On 6/14/19 21:11, Yasumasa Suenaga wrote:
> > > > > > > > > > > Hi Serguei,
> > > > > > > > > > > 
> > > > > > > > > > > Thank you for your comment!
> > > > > > > > > > > 
> > > > > > > > > > > On 2019/06/15 8:00, serguei.spitsyn@oracle.com
> > > > > > > <mailto:serguei.spitsyn@oracle.com> wrote:
> > > > > > > > > > > > Hi Yasumasa,
> > > > > > > > > > > > 
> > > > > > > > > > > > I've added myself as a reviewer, so you can finalize it
> now.
> > > > > > > > > > > 
> > > > > > > > > > > I moved CSR to Finalized, and added a comment for your
> > > > > > > question.
> > > > > > > > > > 
> > > > > > > > > > Okay, thanks!
> > > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > > > > The fix looks pretty good to me.
> > > > > > > > > > > > 
> > > > > > > > > > > > One minor suggestion is to use the final field NO_REMOTE
> > > > > > > instead
> > > > > > > > > > > > of null for initialization of the local variable
> "remote".
> > > > > > > > > > > 
> > > > > > > > > > > I will fix that.
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > > Also just an observation that there is some room for
> option
> > > > > > > > > > > > processing refactoring.
> > > > > > > > > > > 
> > > > > > > > > > > Your suggestion handles all options in one parser method.
> > > > > > > > > > > I concern it might be complex for option validation.
> > > > > > > > > > > (e.g. `jmap -heap` is allowed, but `jstack -heap` is not
> > > > > > > allowed.)
> > > > > > > > > > 
> > > > > > > > > > This concern is not valid as the list allowed options
> allowed
> > > > > > > for each
> > > > > > > > > > jhsdb sub-command is controlled with the longOpts
> argument.
> > > > > > > > > > 
> > > > > > > > > > jmap has:
> > > > > > > > > > String[] longOpts = {"exe=", "core=", "pid=",
> > > > > > > "remote=",
> > > > > > > > > > "heap", "binaryheap", "dumpfile=",
> "histo",
> > > > > > > > > > "clstats", "finalizerinfo"};
> > > > > > > > > > 
> > > > > > > > > > but jstack has:
> > > > > > > > > > String[] longOpts = {"exe=", "core=", "pid=",
> > > > > > > "remote=",
> > > > > > > > > > "mixed", "locks"};
> > > > > > > > > > 
> > > > > > > > > > > IMHO refactoring should be worked on another issue.
> > > > > > > > > > 
> > > > > > > > > > Agreed.
> > > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > > > If you are OK in above, I will upload new webrev.
> > > > > > > > > > 
> > > > > > > > > > Yes, I'm Okay with it.
> > > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > > Thanks,
> > > > > > > > > > Serguei
> > > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > > > Thanks,
> > > > > > > > > > > 
> > > > > > > > > > > Yasumasa
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > > All the jhsdb sub-commands do execute similar loops like
> > > > > > > this:
> > > > > > > > > > > > while((s = sg.next(null, longOpts)) != null) {
> > > > > > > > > > > > . . .
> > > > > > > > > > > > }
> > > > > > > > > > > > 
> > > > > > > > > > > > It can be moved into a separate method instead.
> > > > > > > > > > > > The longOpts can passed in arguments.
> > > > > > > > > > > > 
> > > > > > > > > > > > It can be something like this:
> > > > > > > > > > > > 
> > > > > > > > > > > > private ArrayList<String> processOptions(final
> String[]
> > > > > > > oldArgs,
> > > > > > > > > > > > final
> String[]
> > > > > > > > > > > > longOpts,
> > > > > > > > > > > > boolean
> > > > > > > allowEmpty) {
> > > > > > > > > > > > SAGetopt sg = new SAGetopt(oldArgs);
> > > > > > > > > > > > ArrayList<String> newArgs = new ArrayList();
> > > > > > > > > > > > 
> > > > > > > > > > > > String pid = null;
> > > > > > > > > > > > String exe = null;
> > > > > > > > > > > > String core = null;
> > > > > > > > > > > > String s = null;
> > > > > > > > > > > > String dumpfile = null;
> > > > > > > > > > > > String remote = NO_REMOTE;
> > > > > > > > > > > > boolean requestHeapdump = false;
> > > > > > > > > > > > 
> > > > > > > > > > > > while((s = sg.next(null, longOpts)) != null) {
> > > > > > > > > > > > if (s.equals("exe")) {
> > > > > > > > > > > > exe = sg.getOptarg();
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("core")) {
> > > > > > > > > > > > core = sg.getOptarg();
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("pid")) {
> > > > > > > > > > > > pid = sg.getOptarg();
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("remote")) {
> > > > > > > > > > > > remote = sg.getOptarg();
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("mixed")) {
> > > > > > > > > > > > newArgs.add("-m");
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("locks")) {
> > > > > > > > > > > > newArgs.add("-l");
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("heap")) {
> > > > > > > > > > > > newArgs.add("-heap");
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("binaryheap")) {
> > > > > > > > > > > > requestHeapdump = true;
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("dumpfile")) {
> > > > > > > > > > > > dumpfile = sg.getOptarg();
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("histo")) {
> > > > > > > > > > > > newArgs.add("-histo");
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("clstats")) {
> > > > > > > > > > > > newArgs.add("-clstats");
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("finalizerinfo")) {
> > > > > > > > > > > > newArgs.add("-finalizerinfo");
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("flags")) {
> > > > > > > > > > > > newArgs.add("-flags");
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("sysprops")) {
> > > > > > > > > > > > newArgs.add("-sysprops");
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > if (s.equals("serverid")) {
> > > > > > > > > > > > String serverid = sg.getOptarg();
> > > > > > > > > > > > if (serverid != null) {
> > > > > > > > > > > > newArgs.add(serverid);
> > > > > > > > > > > > }
> > > > > > > > > > > > continue;
> > > > > > > > > > > > }
> > > > > > > > > > > > }
> > > > > > > > > > > > 
> > > > > > > > > > > > if (!requestHeapdump && (dumpfile != null)) {
> > > > > > > > > > > > throw new
> IllegalArgumentException("Unexpected
> > > > > > > > > > > > argument dumpfile");
> > > > > > > > > > > > }
> > > > > > > > > > > > if (requestHeapdump) {
> > > > > > > > > > > > if (dumpfile == null) {
> > > > > > > > > > > > newArgs.add("-heap:format=b");
> > > > > > > > > > > > } else {
> > > > > > > > > > > > newArgs.add("-heap:format=b,file=" +
> > > > > > > dumpfile);
> > > > > > > > > > > > }
> > > > > > > > > > > > }
> > > > > > > > > > > > buildAttachArgs(newArgs, pid, exe, core,
> remote,
> > > > > > > > > > > > allowEmpty);
> > > > > > > > > > > > 
> > > > > > > > > > > > return newArgs;
> > > > > > > > > > > > }
> > > > > > > > > > > > 
> > > > > > > > > > > > private static void runCLHSDB(String[] oldArgs) {
> > > > > > > > > > > > String[] longOpts = {"exe=", "core=", "pid="};
> > > > > > > > > > > > ArrayList<String> newArgs =
> processOptions(oldArgs,
> > > > > > > > > > > > longOpts, true);
> > > > > > > > > > > > 
> > > > > > > > > > > > CLHSDB.main(newArgs.toArray(new
> > > > > > > String[newArgs.size()]));
> > > > > > > > > > > > }
> > > > > > > > > > > > 
> > > > > > > > > > > > private static void runHSDB(String[] oldArgs) {
> > > > > > > > > > > > String[] longOpts = {"exe=", "core=", "pid="};
> > > > > > > > > > > > ArrayList<String> newArgs =
> > > > > > > processOptions(oldArgs,
> > > > > > > > > > > > longOpts, true);
> > > > > > > > > > > > 
> > > > > > > > > > > > HSDB.main(newArgs.toArray(new
> > > > > > > String[newArgs.size()]));
> > > > > > > > > > > > }
> > > > > > > > > > > > 
> > > > > > > > > > > > private static void runJSTACK(String[] oldArgs) {
> > > > > > > > > > > > String[] longOpts = {"exe=", "core=", "pid=",
> > > > > > > "remote=",
> > > > > > > > > > > > "mixed", "locks"};
> > > > > > > > > > > > ArrayList<String> newArgs =
> processOptions(oldArgs,
> > > > > > > > > > > > longOpts, false);
> > > > > > > > > > > > 
> > > > > > > > > > > > JStack jstack = new JStack(false, false);
> > > > > > > > > > > > jstack.runWithArgs(newArgs.toArray(new
> > > > > > > > > > > > String[newArgs.size()]));
> > > > > > > > > > > > }
> > > > > > > > > > > > 
> > > > > > > > > > > > private static void runJMAP(String[] oldArgs) {
> > > > > > > > > > > > String[] longOpts = {"exe=", "core=", "pid=",
> > > > > > > "remote=",
> > > > > > > > > > > > "heap", "binaryheap", "dumpfile=",
> "histo",
> > > > > > > > > > > > "clstats", "finalizerinfo"};
> > > > > > > > > > > > 
> > > > > > > > > > > > ArrayList<String> newArgs =
> processOptions(oldArgs,
> > > > > > > > > > > > longOpts, false);
> > > > > > > > > > > > 
> > > > > > > > > > > > JMap.main(newArgs.toArray(new
> > > > > > > String[newArgs.size()]));
> > > > > > > > > > > > }
> > > > > > > > > > > > 
> > > > > > > > > > > > private static void runJINFO(String[] oldArgs) {
> > > > > > > > > > > > String[] longOpts = {"exe=", "core=", "pid=",
> > > > > > > "remote=",
> > > > > > > > > > > > "flags", "sysprops"};
> > > > > > > > > > > > ArrayList<String> newArgs =
> processOptions(oldArgs,
> > > > > > > > > > > > longOpts, false);
> > > > > > > > > > > > 
> > > > > > > > > > > > JInfo.main(newArgs.toArray(new
> > > > > > > String[newArgs.size()]));
> > > > > > > > > > > > }
> > > > > > > > > > > > 
> > > > > > > > > > > > private static void runJSNAP(String[] oldArgs) {
> > > > > > > > > > > > String[] longOpts = {"exe=", "core=", "pid=",
> > > > > > > "remote=",
> > > > > > > > > > > > "all"};
> > > > > > > > > > > > ArrayList<String> newArgs =
> processOptions(oldArgs,
> > > > > > > > > > > > longOpts, false);
> > > > > > > > > > > > JSnap.main(newArgs.toArray(new
> > > > > > > String[newArgs.size()]));
> > > > > > > > > > > > }
> > > > > > > > > > > > 
> > > > > > > > > > > > private static void runDEBUGD(String[] oldArgs) {
> > > > > > > > > > > > // By default SA agent classes prefer Windows
> > > > > > > process
> > > > > > > > > > > > debugger
> > > > > > > > > > > > // to windbg debugger. SA expects special
> > > > > > > properties to
> > > > > > > > > > > > be set
> > > > > > > > > > > > // to choose other debuggers. We will set those
> > > > > > > here
> > > > > > > before
> > > > > > > > > > > > // attaching to SA agent.
> > > > > > > > > > > > 
> > > > > > > System.setProperty("sun.jvm.hotspot.debugger.useWindbgDebugger",
> > > > > > > > > > > > "true");
> > > > > > > > > > > > 
> > > > > > > > > > > > String[] longOpts = {"exe=", "core=", "pid=",
> > > > > > > "serverid="};
> > > > > > > > > > > > ArrayList<String> newArgs =
> processOptions(oldArgs,
> > > > > > > > > > > > longOpts, false);
> > > > > > > > > > > > 
> > > > > > > > > > > > // delegate to the actual SA debug server.
> > > > > > > > > > > > sun.jvm.hotspot.DebugServer.main(newArgs.toArray(new
> > > > > > > > > > > > String[newArgs.size()]));
> > > > > > > > > > > > }
> > > > > > > > > > > > 
> > > > > > > > > > > > 
> > > > > > > > > > > > Please, let me know what do you think.
> > > > > > > > > > > > 
> > > > > > > > > > > > Thanks,
> > > > > > > > > > > > Serguei
> > > > > > > > > > > > 
> > > > > > > > > > > > 
> > > > > > > > > > > > On 6/9/19 7:29 PM, Yasumasa Suenaga wrote:
> > > > > > > > > > > > > Sorry, new webrev is here:
> > > > > > > > > > > > > 
> http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.01/
> > > > > > > > > > > > > 
> > > > > > > > > > > > > Yasumasa
> > > > > > > > > > > > > 
> > > > > > > > > > > > > 2019年6月10日(月) 11:27 Yasumasa Suenaga<
> yasuenag@gmail.com
> > > > > > > <mailto:yasuenag@gmail.com>>:
> > > > > > > > > > > > > > PING: Could you review them?
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > > JBS:
> https://bugs.openjdk.java.net/browse/JDK-8209790
> > > > > > > > > > > > > > > > > > CSR:
> https://bugs.openjdk.java.net/browse/JDK-8224979
> > > > > > > > > > > > > > > > > > 
> > > > > > > webrev:
> http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > It is P3 bug, but I want to fix it before JDK 13 RDP
> 1 if
> > > > > > > possible.
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > Yasumasa
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > 2019年6月5日(水) 14:06 Yasumasa Suenaga<
> yasuenag@gmail.com
> > > > > > > <mailto:yasuenag@gmail.com>>:
> > > > > > > > > > > > > > > Hi Jc,
> > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > Thank you for your comment!
> > > > > > > > > > > > > > > I updated a webrev:
> > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > 
> > > > > > > http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.01/
> > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > - In runTests; if DebugdUtils implemented
> > > > > > > Closeable, you
> > > > > > > > > > > > > > > > could just do a try-with-resources instead of the
> > > > > > > finally
> > > > > > > > > > > > > > > > clause...
> > > > > > > > > > > > > > > I created DebugdUtils for convenience class for
> attach -
> > > > > > > detach
> > > > > > > > > > > > > > > mechanism of debug server.
> > > > > > > > > > > > > > > IMHO it is prefer "detach" to "close" in this case.
> > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > Yasumasa
> > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > 2019年6月5日(水) 11:34 Jean Christophe
> > > > > > > Beyler<jcbeyler@google.com <mailto:jcbeyler@google.com>>:
> > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > Hi Yasumasa,
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > I'm not an official reviewer but I don't see an
> issue
> > > > > > > with the
> > > > > > > > > > > > > > > > CSR (except that this seems to be bringing a fork
> in the
> > > > > > > tools
> > > > > > > > > > > > > > > > with some handling remote and others not).
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > However, this code is really repetitive and this is
> > > > > > > not the
> > > > > > > > > > > > > > > > place to do a big refactor probably but we could do
> a
> > > > > > > few
> > > > > > > nits
> > > > > > > > > > > > > > > > perhaps:
> > > > > > > > > > > > > > > > - Instead of every tool calling commonHelp with
> an
> > > > > > > > > > > > > > > > additional flag you could divide into commonHelp and
> > > > > > > > > > > > > > > > commonHelpWithRemote for the tools and they both
> call
> > > > > > > the
> > > > > > > > > > > > > > > > current commonHelp with that boolean; so that when
> we
> > > > > > > are
> > > > > > > > > > > > > > > > looking at the tool code we know what we are
> > > > > > > getting... So
> > > > > > > > > > > > > > > > something like:
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > private static boolean commonHelp(String mode,
> boolean
> > > > > > > > > > > > > > > > canConnectToRemote) {
> > > > > > > > > > > > > > > > ..
> > > > > > > > > > > > > > > > }
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > private static boolean commonHelp(String mode) {
> > > > > > > > > > > > > > > > return commonHelp(mode, false);
> > > > > > > > > > > > > > > > }
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > private static boolean commonHelpWithRemote(String
> > > > > > > mode) {
> > > > > > > > > > > > > > > > return commonHelp(mode, false);
> > > > > > > > > > > > > > > > }
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > and that way the tools that change are just going
> from:
> > > > > > > > > > > > > > > > -        return commonHelp("jmap");
> > > > > > > > > > > > > > > > +        return commonHelpWithRemote("jmap");
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > - In the same vein, instead of passing null to the
> > > > > > > > > > > > > > > > buildAttachArgs; you could  make a variable null:
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > -        buildAttachArgs(newArgs, pid, exe, core,
> true);
> > > > > > > > > > > > > > > > +        String noRemote = null;
> > > > > > > > > > > > > > > > +        buildAttachArgs(newArgs, pid, exe, core,
> > > > > > > noRemote,
> > > > > > > > > > > > > > > > true);
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > 
> > > > > > > -
> http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/test/hotspot/jtreg/serviceability/sa/sadebugd/DebugdUtils.java.html
> 
> > > > > > > 
> > > > > > > 
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > Nit: you have empty lines at l64 and l73
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > 
> > > > > > > -
> http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/test/hotspot/jtreg/serviceability/sa/sadebugd/DebugdConnectTest.java.html
> 
> > > > > > > 
> > > > > > > 
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > Nit : you have an empty line at l110
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > - In runTests; if DebugdUtils implemented
> > > > > > > Closeable, you
> > > > > > > > > > > > > > > > could just do a try-with-resources instead of the
> > > > > > > finally
> > > > > > > > > > > > > > > > clause...
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > All of these are details, I just thought I'd mention
> > > > > > > them :)
> > > > > > > > > > > > > > > > Jc
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > On Tue, Jun 4, 2019 at 6:44 PM Yasumasa
> > > > > > > > > > > > > > > > Suenaga<yasuenag@gmail.com
> > > > > > > <mailto:yasuenag@gmail.com>>     wrote:
> > > > > > > > > > > > > > > > > PING: Could you review them?
> > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > > JBS:
> https://bugs.openjdk.java.net/browse/JDK-8209790
> > > > > > > > > > > > > > > > > > CSR:
> https://bugs.openjdk.java.net/browse/JDK-8224979
> > > > > > > > > > > > > > > > > > 
> > > > > > > webrev:
> http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > CSR status is provisional. So I need reviewers both
> > > > > > > CSR and
> > > > > > > > > > > > > > > > > webrev.
> > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > Yasumasa
> > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > 2019年5月29日(水) 22:37 Yasumasa
> > > > > > > Suenaga<yasuenag@gmail.com <mailto:yasuenag@gmail.com>>:
> > > > > > > > > > > > > > > > > > Hi all,
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > > Please review this change:
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > > JBS:
> https://bugs.openjdk.java.net/browse/JDK-8209790
> > > > > > > > > > > > > > > > > > CSR:
> https://bugs.openjdk.java.net/browse/JDK-8224979
> > > > > > > > > > > > > > > > > > 
> > > > > > > webrev:
> http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > > In JDK 8 or earlier, some tools (jstack, jmap,
> > > > > > > jinfo) can
> > > > > > > > > > > > > > > > > > connect to
> > > > > > > > > > > > > > > > > > debug server (jsadebugd). However it has not done
> > > > > > > so since
> > > > > > > > > > > > > > > > > > JDK 9 because
> > > > > > > > > > > > > > > > > > jhsdb cannot accept the attach request to debug
> > > > > > > server.
> > > > > > > > > > > > > > > > > > So I want to introduce new option `--remote` to
> > > > > > > connect to
> > > > > > > > > > > > > > > > > > debug server.
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > > I created CSR for this issue. So please review it
> > > > > > > together.
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > > Yasumasa
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > --
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > > Jc
> > > > > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > 
> > > > > > > 
> 
> 


[Attachment #3 (text/html)]

<div dir="auto">Thanks, Serguei!<div dir="auto"><br></div><div \
dir="auto">Yasumasa</div><div dir="auto"><br></div></div><br><div \
class="gmail_quote"><div dir="ltr" class="gmail_attr">2019年6月25日(火) 17:35 <a \
href="mailto:serguei.spitsyn@oracle.com">serguei.spitsyn@oracle.com</a> &lt;<a \
href="mailto:serguei.spitsyn@oracle.com">serguei.spitsyn@oracle.com</a>&gt;:<br></div><blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex">Hi Yasumasa,<br> <br>
The fix looks good to me.<br>
<br>
Thanks,<br>
Serguei<br>
<br>
<br>
On 6/25/19 00:47, Yasumasa Suenaga wrote:<br>
&gt; Hi,<br>
&gt;<br>
&gt; This enhancement has been retargeted to 14, and the CSR has been approved.<br>
&gt; I uploaded a webrev for 14. Could you review it?<br>
&gt;<br>
&gt;      <a href="http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.03/" \
rel="noreferrer noreferrer" \
target="_blank">http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.03/</a><br> \
&gt;<br> &gt; It includes the fix to rename `--remote` to `--connect` that is<br>
&gt; suggested in CSR.<br>
&gt; It passed tests on submit repo.<br>
&gt;<br>
&gt;<br>
&gt; Thanks,<br>
&gt;<br>
&gt; Yasumasa<br>
&gt;<br>
&gt;<br>
&gt; 2019年6月17日(月) 22:11 Yasumasa Suenaga &lt;<a \
href="mailto:yasuenag@gmail.com" target="_blank" \
rel="noreferrer">yasuenag@gmail.com</a>&gt;:<br> &gt;&gt; Hi David,<br>
&gt;&gt;<br>
&gt;&gt; On 2019/06/17 21:42, David Holmes wrote:<br>
&gt;&gt;&gt; Hi Yasumasa,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On 17/06/2019 6:50 pm, Yasumasa Suenaga wrote:<br>
&gt;&gt;&gt;&gt; Hi David,<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; 8209790 is filed as a bug.<br>
&gt;&gt;&gt; I don&#39;t agree this is a &quot;bug&quot; - sorry. For this to be a \
bug there must<br> &gt;&gt;&gt; be some specification of behaviour that the \
implementation is violating.<br> &gt;&gt;&gt; Is that the case? To me this is missing \
functionality which makes it an<br> &gt;&gt;&gt; enhancement.<br>
&gt;&gt; The feature for connecting to remote debug server has been provided JDK<br>
&gt;&gt; 8 or earlier. However it was missed since JDK 9. So I think we can<br>
&gt;&gt; handle it as a &quot;bug&quot;.<br>
&gt;&gt; Anyway, I added jdk13-enhancement-request label to JBS. I&#39;m waiting \
for<br> &gt;&gt; the approval.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt;&gt; According to [1], I think we can push the fix to jdk/jdk13. Does \
it<br> &gt;&gt;&gt;&gt; correct?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I&#39;m not sure which version (13 or 14) should be set on JBS \
before<br> &gt;&gt;&gt;&gt; pushing.<br>
&gt;&gt;&gt; Just to clarify the process here, you don&#39;t want to set the \
&quot;Fix<br> &gt;&gt;&gt; Version&quot; to 13 or 14 in JBS before pushing. That will \
be set based on<br> &gt;&gt;&gt; the repo you push to. If you push to jdk/jdk it will \
be 14. If you push<br> &gt;&gt;&gt; to jdk/jdk13 it will be 13. Any fix pushed to \
jdk/jdk13 will be<br> &gt;&gt;&gt; &quot;automatically&quot; forward-ported to \
jdk/jdk and thus 14.<br> &gt;&gt; Thanks! I got it.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Yasumasa<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt; David<br>
&gt;&gt;&gt; -----<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; (Of course I will push it after the CSR is approved.)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Thanks,<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Yasumasa<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; [1] <a \
href="http://mail.openjdk.java.net/pipermail/jdk-dev/2019-June/003051.html" \
rel="noreferrer noreferrer" \
target="_blank">http://mail.openjdk.java.net/pipermail/jdk-dev/2019-June/003051.html</a><br>
 &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On 2019/06/17 17:06, David Holmes wrote:<br>
&gt;&gt;&gt;&gt;&gt; Hi Yasumasa,<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; On 17/06/2019 8:52 am, Yasumasa Suenaga wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt; 2019年6月17日(月) 6:47 <a \
href="mailto:serguei.spitsyn@oracle.com" target="_blank" \
rel="noreferrer">serguei.spitsyn@oracle.com</a><br> &gt;&gt;&gt;&gt;&gt;&gt; \
&lt;mailto:<a href="mailto:serguei.spitsyn@oracle.com" target="_blank" \
rel="noreferrer">serguei.spitsyn@oracle.com</a>&gt; &lt;<a \
href="mailto:serguei.spitsyn@oracle.com" target="_blank" \
rel="noreferrer">serguei.spitsyn@oracle.com</a><br> &gt;&gt;&gt;&gt;&gt;&gt; \
&lt;mailto:<a href="mailto:serguei.spitsyn@oracle.com" target="_blank" \
rel="noreferrer">serguei.spitsyn@oracle.com</a>&gt;&gt;:<br> \
&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;         Forgot to tell...<br>
&gt;&gt;&gt;&gt;&gt;&gt;         This can be pushed only after the CSR is \
approved.<br> &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Sure!<br>
&gt;&gt;&gt;&gt;&gt;&gt; And I will push it when I get second reviewer.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; BTW should I push this change to jdk/jdk? or push to \
jdk/jdk13<br> &gt;&gt;&gt;&gt;&gt;&gt; manually?<br>
&gt;&gt;&gt;&gt;&gt; JDK 13 has now entered RDP1 so if you want this to go into 13 it \
will<br> &gt;&gt;&gt;&gt;&gt; need special approval:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; <a \
href="http://openjdk.java.net/jeps/3#Late-Enhancement-Request-Process" \
rel="noreferrer noreferrer" \
target="_blank">http://openjdk.java.net/jeps/3#Late-Enhancement-Request-Process</a><br>
 &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Otherwise push to jdk/jdk and it will be for JDK 14.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Cheers,<br>
&gt;&gt;&gt;&gt;&gt; David<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Thanks,<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Yasumasa<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;         Thanks,<br>
&gt;&gt;&gt;&gt;&gt;&gt;         Serguei<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;         On 6/16/19 14:44, <a \
href="mailto:serguei.spitsyn@oracle.com" target="_blank" \
rel="noreferrer">serguei.spitsyn@oracle.com</a><br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&lt;mailto:<a href="mailto:serguei.spitsyn@oracle.com" target="_blank" \
rel="noreferrer">serguei.spitsyn@oracle.com</a>&gt; wrote:<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt; Hi Yasumasa,<br> &gt;&gt;&gt;&gt;&gt;&gt;     \
&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt; On 6/16/19 07:22, Yasumasa Suenaga wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt; Hi Serguei,<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt; &gt;&gt;&gt; One minor suggestion is to \
use the final field NO_REMOTE<br> &gt;&gt;&gt;&gt;&gt;&gt; instead<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt; &gt;&gt;&gt; of null for initialization \
of the local variable &quot;remote&quot;.<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt; I fixed it on new webrev. \
Could you check again?<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt; <a \
href="http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.02/" rel="noreferrer \
noreferrer" target="_blank">http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.02/</a><br>
 &gt;&gt;&gt;&gt;&gt;&gt;           &gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt; It looks good.<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt; Thanks you for the update!<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt; &gt;&gt; IMHO refactoring should be \
worked on another issue.<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt; &gt; Agreed.<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt; I filed it to JBS:<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt; <a \
href="https://bugs.openjdk.java.net/browse/JDK-8226204" rel="noreferrer noreferrer" \
target="_blank">https://bugs.openjdk.java.net/browse/JDK-8226204</a><br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt; \
Thank you for filing the enhancement!<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt; Thanks.<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt; Serguei<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt; Thanks,<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt; Yasumasa<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt; On 2019/06/15 15:10, <a \
href="mailto:serguei.spitsyn@oracle.com" target="_blank" \
rel="noreferrer">serguei.spitsyn@oracle.com</a><br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&lt;mailto:<a href="mailto:serguei.spitsyn@oracle.com" target="_blank" \
rel="noreferrer">serguei.spitsyn@oracle.com</a>&gt; wrote:<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt; Hi Yasumasa,<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;          \
&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt; On 6/14/19 21:11, \
Yasumasa Suenaga wrote:<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt; Hi \
Serguei,<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt; Thank you for your comment!<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt; On 2019/06/15 8:00, <a \
href="mailto:serguei.spitsyn@oracle.com" target="_blank" \
rel="noreferrer">serguei.spitsyn@oracle.com</a><br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&lt;mailto:<a href="mailto:serguei.spitsyn@oracle.com" target="_blank" \
rel="noreferrer">serguei.spitsyn@oracle.com</a>&gt; wrote:<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; Hi Yasumasa,<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;  \
&gt;&gt;&gt;&gt;&gt; I&#39;ve added myself as a reviewer, so you can finalize it \
now.<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt; I moved CSR to Finalized, and \
added a comment for your<br> &gt;&gt;&gt;&gt;&gt;&gt; question.<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt; Okay, thanks!<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; The fix looks pretty good to \
me.<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; One minor suggestion is to \
use the final field NO_REMOTE<br> &gt;&gt;&gt;&gt;&gt;&gt; instead<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; of null for initialization of \
the local variable &quot;remote&quot;.<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt; I will fix \
that.<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; Also just an observation that \
there is some room for option<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt; processing refactoring.<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt; Your \
suggestion handles all options in one parser method.<br> &gt;&gt;&gt;&gt;&gt;&gt;     \
&gt;&gt;&gt;&gt; I concern it might be complex for option validation.<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt; (e.g. `jmap -heap` is allowed, \
but `jstack -heap` is not<br> &gt;&gt;&gt;&gt;&gt;&gt; allowed.)<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt; This concern is not valid as the list \
allowed options allowed<br> &gt;&gt;&gt;&gt;&gt;&gt;         for each<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt; jhsdb sub-command is controlled with \
the longOpts argument.<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt; jmap has:<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;                 String[] longOpts = \
{&quot;exe=&quot;, &quot;core=&quot;, &quot;pid=&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt; \
&quot;remote=&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;              \
&quot;heap&quot;, &quot;binaryheap&quot;, &quot;dumpfile=&quot;, \
&quot;histo&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt; \
&quot;clstats&quot;, &quot;finalizerinfo&quot;};<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt; but jstack has:<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;                 String[] longOpts = \
{&quot;exe=&quot;, &quot;core=&quot;, &quot;pid=&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt; \
&quot;remote=&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt; \
&quot;mixed&quot;, &quot;locks&quot;};<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt; IMHO refactoring \
should be worked on another issue.<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt; Agreed.<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt; If you are OK in above, I will \
upload new webrev.<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt; Yes, I&#39;m Okay with it.<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt; Thanks,<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt; Serguei<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt; Thanks,<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt; Yasumasa<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; All the jhsdb sub-commands do \
execute similar loops like<br> &gt;&gt;&gt;&gt;&gt;&gt; this:<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; while((s = sg.next(null, \
longOpts)) != null) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;     \
. . .<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;         }<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; It can be moved into a \
separate method instead.<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
The longOpts can passed in arguments.<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; It \
can be something like this:<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;      \
private ArrayList&lt;String&gt; processOptions(final String[]<br> \
&gt;&gt;&gt;&gt;&gt;&gt;         oldArgs,<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                                                                  \
final String[]<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
longOpts,<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                 \
boolean<br> &gt;&gt;&gt;&gt;&gt;&gt;         allowEmpty) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;               SAGetopt sg = \
new SAGetopt(oldArgs);<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;    \
ArrayList&lt;String&gt; newArgs = new ArrayList();<br> &gt;&gt;&gt;&gt;&gt;&gt;       \
&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;      \
String pid = null;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;        \
String exe = null;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;        \
String core = null;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;       \
String s = null;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;          \
String dumpfile = null;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;   \
String remote = NO_REMOTE;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;               boolean requestHeapdump = false;<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;  \
&gt;&gt;&gt;&gt;&gt;               while((s = sg.next(null, longOpts)) != null) {<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                     if \
(s.equals(&quot;exe&quot;)) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           exe = sg.getOptarg();<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                           \
continue;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                 \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                     if \
(s.equals(&quot;core&quot;)) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           core = sg.getOptarg();<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                           \
continue;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                 \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                     if \
(s.equals(&quot;pid&quot;)) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                             pid = sg.getOptarg();<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                             \
continue;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                 \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                     if \
(s.equals(&quot;remote&quot;)) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           remote = sg.getOptarg();<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                           \
continue;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                 \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                     if \
(s.equals(&quot;mixed&quot;)) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           newArgs.add(&quot;-m&quot;);<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                           \
continue;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                 \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                     if \
(s.equals(&quot;locks&quot;)) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           newArgs.add(&quot;-l&quot;);<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                           \
continue;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                 \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                     if \
(s.equals(&quot;heap&quot;)) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           newArgs.add(&quot;-heap&quot;);<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                           \
continue;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                 \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                     if \
(s.equals(&quot;binaryheap&quot;)) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           requestHeapdump = true;<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                           \
continue;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                 \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                     if \
(s.equals(&quot;dumpfile&quot;)) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           dumpfile = sg.getOptarg();<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                           \
continue;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                 \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                     if \
(s.equals(&quot;histo&quot;)) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           newArgs.add(&quot;-histo&quot;);<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                           \
continue;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                 \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                     if \
(s.equals(&quot;clstats&quot;)) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           newArgs.add(&quot;-clstats&quot;);<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                             \
continue;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                 \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                     if \
(s.equals(&quot;finalizerinfo&quot;)) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           \
newArgs.add(&quot;-finalizerinfo&quot;);<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           continue;<br> &gt;&gt;&gt;&gt;&gt;&gt; \
&gt;&gt;&gt;&gt;&gt;                     }<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                     if (s.equals(&quot;flags&quot;)) {<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                           \
newArgs.add(&quot;-flags&quot;);<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           continue;<br> &gt;&gt;&gt;&gt;&gt;&gt; \
&gt;&gt;&gt;&gt;&gt;                     }<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                     if (s.equals(&quot;sysprops&quot;)) {<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                           \
newArgs.add(&quot;-sysprops&quot;);<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           continue;<br> &gt;&gt;&gt;&gt;&gt;&gt; \
&gt;&gt;&gt;&gt;&gt;                     }<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                     if (s.equals(&quot;serverid&quot;)) {<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                           \
String serverid = sg.getOptarg();<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                           if (serverid != null) {<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                               \
newArgs.add(serverid);<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;    \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                         \
continue;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                 \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;               }<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;               if \
(!requestHeapdump &amp;&amp; (dumpfile != null)) {<br> &gt;&gt;&gt;&gt;&gt;&gt;       \
&gt;&gt;&gt;&gt;&gt;                     throw new \
IllegalArgumentException(&quot;Unexpected<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt; argument dumpfile&quot;);<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;               }<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;               if (requestHeapdump) {<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                     if \
(dumpfile == null) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;      \
newArgs.add(&quot;-heap:format=b&quot;);<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                     } else {<br> &gt;&gt;&gt;&gt;&gt;&gt;        \
&gt;&gt;&gt;&gt;&gt;                             \
newArgs.add(&quot;-heap:format=b,file=&quot; +<br> &gt;&gt;&gt;&gt;&gt;&gt; \
dumpfile);<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;                \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;               }<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;               \
buildAttachArgs(newArgs, pid, exe, core, remote,<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&gt;&gt;&gt;&gt;&gt; allowEmpty);<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;      \
return newArgs;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;         \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;         private static void \
runCLHSDB(String[] oldArgs) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;               String[] longOpts = {&quot;exe=&quot;, \
&quot;core=&quot;, &quot;pid=&quot;};<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;               ArrayList&lt;String&gt; newArgs = \
processOptions(oldArgs,<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
longOpts, true);<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;               \
CLHSDB.main(newArgs.toArray(new<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
String[newArgs.size()]));<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;         private static void \
runHSDB(String[] oldArgs) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;               String[] longOpts = {&quot;exe=&quot;, \
&quot;core=&quot;, &quot;pid=&quot;};<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;                 ArrayList&lt;String&gt; newArgs =<br> \
&gt;&gt;&gt;&gt;&gt;&gt; processOptions(oldArgs,<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&gt;&gt;&gt;&gt;&gt; longOpts, true);<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;      \
HSDB.main(newArgs.toArray(new<br> &gt;&gt;&gt;&gt;&gt;&gt; \
String[newArgs.size()]));<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;         private static void \
runJSTACK(String[] oldArgs) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;               String[] longOpts = {&quot;exe=&quot;, \
&quot;core=&quot;, &quot;pid=&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&quot;remote=&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
&quot;mixed&quot;, &quot;locks&quot;};<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;               ArrayList&lt;String&gt; newArgs = \
processOptions(oldArgs,<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
longOpts, false);<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;               JStack jstack = \
new JStack(false, false);<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
jstack.runWithArgs(newArgs.toArray(new<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt; String[newArgs.size()]));<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;         }<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;      \
private static void runJMAP(String[] oldArgs) {<br> &gt;&gt;&gt;&gt;&gt;&gt;          \
&gt;&gt;&gt;&gt;&gt;               String[] longOpts = {&quot;exe=&quot;, \
&quot;core=&quot;, &quot;pid=&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt; \
&quot;remote=&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;      \
&quot;heap&quot;, &quot;binaryheap&quot;, &quot;dumpfile=&quot;, \
&quot;histo&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
&quot;clstats&quot;, &quot;finalizerinfo&quot;};<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;      \
ArrayList&lt;String&gt; newArgs = processOptions(oldArgs,<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; longOpts, false);<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;  \
&gt;&gt;&gt;&gt;&gt;               JMap.main(newArgs.toArray(new<br> \
&gt;&gt;&gt;&gt;&gt;&gt; String[newArgs.size()]));<br> &gt;&gt;&gt;&gt;&gt;&gt;       \
&gt;&gt;&gt;&gt;&gt;         }<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;      \
private static void runJINFO(String[] oldArgs) {<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&gt;&gt;&gt;&gt;&gt;               String[] longOpts = {&quot;exe=&quot;, \
&quot;core=&quot;, &quot;pid=&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&quot;remote=&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
&quot;flags&quot;, &quot;sysprops&quot;};<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;               ArrayList&lt;String&gt; newArgs = \
processOptions(oldArgs,<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
longOpts, false);<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;               \
JInfo.main(newArgs.toArray(new<br> &gt;&gt;&gt;&gt;&gt;&gt; \
String[newArgs.size()]));<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;         private static void \
runJSNAP(String[] oldArgs) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;               String[] longOpts = {&quot;exe=&quot;, \
&quot;core=&quot;, &quot;pid=&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&quot;remote=&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
&quot;all&quot;};<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;         \
ArrayList&lt;String&gt; newArgs = processOptions(oldArgs,<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; longOpts, false);<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;               \
JSnap.main(newArgs.toArray(new<br> &gt;&gt;&gt;&gt;&gt;&gt; \
String[newArgs.size()]));<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
}<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;         private static void \
runDEBUGD(String[] oldArgs) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;               // By default SA agent classes prefer Windows<br> \
&gt;&gt;&gt;&gt;&gt;&gt; process<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt; debugger<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;               // to windbg debugger. SA expects special<br> \
&gt;&gt;&gt;&gt;&gt;&gt; properties to<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt; be set<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;               // to choose other debuggers. We will set \
those<br> &gt;&gt;&gt;&gt;&gt;&gt; here<br>
&gt;&gt;&gt;&gt;&gt;&gt;         before<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;               // attaching to \
SA agent.<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; \
System.setProperty(&quot;sun.jvm.hotspot.debugger.useWindbgDebugger&quot;,<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; &quot;true&quot;);<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;  \
&gt;&gt;&gt;&gt;&gt;               String[] longOpts = {&quot;exe=&quot;, \
&quot;core=&quot;, &quot;pid=&quot;,<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&quot;serverid=&quot;};<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;   \
ArrayList&lt;String&gt; newArgs = processOptions(oldArgs,<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; longOpts, false);<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;  \
&gt;&gt;&gt;&gt;&gt;               // delegate to the actual SA debug server.<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; \
sun.jvm.hotspot.DebugServer.main(newArgs.toArray(new<br> &gt;&gt;&gt;&gt;&gt;&gt;     \
&gt;&gt;&gt;&gt;&gt; String[newArgs.size()]));<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;         }<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; Please, let me know what do \
you think.<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; Thanks,<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; Serguei<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt; On 6/9/19 7:29 PM, Yasumasa \
Suenaga wrote:<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt; Sorry, \
new webrev is here:<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt; \
<a href="http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.01/" rel="noreferrer \
noreferrer" target="_blank">http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.01/</a><br>
 &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt; Yasumasa<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt; 2019年6月10日(月) \
11:27 Yasumasa Suenaga&lt;<a href="mailto:yasuenag@gmail.com" target="_blank" \
rel="noreferrer">yasuenag@gmail.com</a><br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&lt;mailto:<a href="mailto:yasuenag@gmail.com" target="_blank" \
rel="noreferrer">yasuenag@gmail.com</a>&gt;&gt;:<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&gt;&gt;&gt;&gt;&gt;&gt;&gt; PING: Could you review them?<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
JBS:<a href="https://bugs.openjdk.java.net/browse/JDK-8209790" rel="noreferrer \
noreferrer" target="_blank">https://bugs.openjdk.java.net/browse/JDK-8209790</a><br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
CSR:<a href="https://bugs.openjdk.java.net/browse/JDK-8224979" rel="noreferrer \
noreferrer" target="_blank">https://bugs.openjdk.java.net/browse/JDK-8224979</a><br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> \
&gt;&gt;&gt;&gt;&gt;&gt;         webrev:<a \
href="http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/" rel="noreferrer \
noreferrer" target="_blank">http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/</a><br>
 &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt; It is P3 bug, but I \
want to fix it before JDK 13 RDP 1 if<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
possible.<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt; Thanks,<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt; Yasumasa<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt; 2019年6月5日(水) \
14:06 Yasumasa Suenaga&lt;<a href="mailto:yasuenag@gmail.com" target="_blank" \
rel="noreferrer">yasuenag@gmail.com</a><br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&lt;mailto:<a href="mailto:yasuenag@gmail.com" target="_blank" \
rel="noreferrer">yasuenag@gmail.com</a>&gt;&gt;:<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Hi Jc,<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Thank you for your comment!<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; I updated a \
webrev:<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a \
href="http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.01/" rel="noreferrer \
noreferrer" target="_blank">http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.01/</a><br>
 &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;        - In \
runTests; if DebugdUtils implemented<br> &gt;&gt;&gt;&gt;&gt;&gt; Closeable, you<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; could just do \
a try-with-resources instead of the<br> &gt;&gt;&gt;&gt;&gt;&gt; finally<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; clause...<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; I created \
DebugdUtils for convenience class for attach -<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
detach<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
mechanism of debug server.<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; IMHO it is prefer &quot;detach&quot; to \
&quot;close&quot; in this case.<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Thanks,<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Yasumasa<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; 2019年6月5日(水) 11:34 Jean Christophe<br> \
&gt;&gt;&gt;&gt;&gt;&gt;         Beyler&lt;<a href="mailto:jcbeyler@google.com" \
target="_blank" rel="noreferrer">jcbeyler@google.com</a> &lt;mailto:<a \
href="mailto:jcbeyler@google.com" target="_blank" \
rel="noreferrer">jcbeyler@google.com</a>&gt;&gt;:<br> &gt;&gt;&gt;&gt;&gt;&gt;        \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Hi Yasumasa,<br> &gt;&gt;&gt;&gt;&gt;&gt;        \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; I&#39;m not an official reviewer but I don&#39;t \
see an issue<br> &gt;&gt;&gt;&gt;&gt;&gt;         with the<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; CSR (except \
that this seems to be bringing a fork in the<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
tools<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
with some handling remote and others not).<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; However, this code is really repetitive and this \
is<br> &gt;&gt;&gt;&gt;&gt;&gt; not the<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; place to do a \
big refactor probably but we could do a<br> &gt;&gt;&gt;&gt;&gt;&gt; few<br>
&gt;&gt;&gt;&gt;&gt;&gt;         nits<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; perhaps:<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;        - \
Instead of every tool calling commonHelp with an<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; additional flag you could divide into commonHelp \
and<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
commonHelpWithRemote for the tools and they both call<br> &gt;&gt;&gt;&gt;&gt;&gt; \
the<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
current commonHelp with that boolean; so that when we<br> &gt;&gt;&gt;&gt;&gt;&gt; \
are<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
looking at the tool code we know what we are<br> &gt;&gt;&gt;&gt;&gt;&gt; getting... \
So<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
something like:<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; private static boolean commonHelp(String mode, \
boolean<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
canConnectToRemote) {<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         ..<br> &gt;&gt;&gt;&gt;&gt;&gt;          \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     }<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; private static boolean commonHelp(String mode) \
{<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;        \
return commonHelp(mode, false);<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; }<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; private static boolean \
commonHelpWithRemote(String<br> &gt;&gt;&gt;&gt;&gt;&gt; mode) {<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;        return \
commonHelp(mode, false);<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; }<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; and that way the tools that change are just \
going from:<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -            return \
commonHelp(&quot;jmap&quot;);<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +            return \
commonHelpWithRemote(&quot;jmap&quot;);<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; - In the same vein, instead of passing null to \
the<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
buildAttachArgs; you could   make a variable null:<br> &gt;&gt;&gt;&gt;&gt;&gt;       \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -            buildAttachArgs(newArgs, pid, exe, \
core, true);<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +            String noRemote = null;<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +            \
buildAttachArgs(newArgs, pid, exe, core,<br> &gt;&gt;&gt;&gt;&gt;&gt; noRemote,<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; true);<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; -<a \
href="http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/test/hotspot/jtreg/serviceability/sa/sadebugd/DebugdUtils.java.html" \
rel="noreferrer noreferrer" \
target="_blank">http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/test/hotspot/jtreg/serviceability/sa/sadebugd/DebugdUtils.java.html</a><br>
 &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;        Nit: \
you have empty lines at l64 and l73<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt; -<a \
href="http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/test/hotspot/jtreg/serviceability/sa/sadebugd/DebugdConnectTest.java.html" \
rel="noreferrer noreferrer" \
target="_blank">http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/test/hotspot/jtreg/serviceability/sa/sadebugd/DebugdConnectTest.java.html</a><br>
 &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;         Nit : \
you have an empty line at l110<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;        - In runTests; if DebugdUtils \
implemented<br> &gt;&gt;&gt;&gt;&gt;&gt; Closeable, you<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; could just do \
a try-with-resources instead of the<br> &gt;&gt;&gt;&gt;&gt;&gt; finally<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; clause...<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; All of these \
are details, I just thought I&#39;d mention<br> &gt;&gt;&gt;&gt;&gt;&gt; them :)<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Jc<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; On Tue, Jun \
4, 2019 at 6:44 PM Yasumasa<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Suenaga&lt;<a href="mailto:yasuenag@gmail.com" \
target="_blank" rel="noreferrer">yasuenag@gmail.com</a><br> &gt;&gt;&gt;&gt;&gt;&gt; \
&lt;mailto:<a href="mailto:yasuenag@gmail.com" target="_blank" \
rel="noreferrer">yasuenag@gmail.com</a>&gt;&gt;        wrote:<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; PING: \
Could you review them?<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; JBS:<a \
href="https://bugs.openjdk.java.net/browse/JDK-8209790" rel="noreferrer noreferrer" \
target="_blank">https://bugs.openjdk.java.net/browse/JDK-8209790</a><br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
CSR:<a href="https://bugs.openjdk.java.net/browse/JDK-8224979" rel="noreferrer \
noreferrer" target="_blank">https://bugs.openjdk.java.net/browse/JDK-8224979</a><br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> \
&gt;&gt;&gt;&gt;&gt;&gt;         webrev:<a \
href="http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/" rel="noreferrer \
noreferrer" target="_blank">http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/</a><br>
 &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; CSR \
status is provisional. So I need reviewers both<br> &gt;&gt;&gt;&gt;&gt;&gt; CSR \
and<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
webrev.<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Thanks,<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Yasumasa<br> &gt;&gt;&gt;&gt;&gt;&gt;        \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; 2019年5月29日(水) 22:37 Yasumasa<br> \
&gt;&gt;&gt;&gt;&gt;&gt;         Suenaga&lt;<a href="mailto:yasuenag@gmail.com" \
target="_blank" rel="noreferrer">yasuenag@gmail.com</a> &lt;mailto:<a \
href="mailto:yasuenag@gmail.com" target="_blank" \
rel="noreferrer">yasuenag@gmail.com</a>&gt;&gt;:<br> &gt;&gt;&gt;&gt;&gt;&gt;         \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Hi all,<br> &gt;&gt;&gt;&gt;&gt;&gt;     \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Please review this change:<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
JBS:<a href="https://bugs.openjdk.java.net/browse/JDK-8209790" rel="noreferrer \
noreferrer" target="_blank">https://bugs.openjdk.java.net/browse/JDK-8209790</a><br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; \
CSR:<a href="https://bugs.openjdk.java.net/browse/JDK-8224979" rel="noreferrer \
noreferrer" target="_blank">https://bugs.openjdk.java.net/browse/JDK-8224979</a><br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> \
&gt;&gt;&gt;&gt;&gt;&gt;         webrev:<a \
href="http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/" rel="noreferrer \
noreferrer" target="_blank">http://cr.openjdk.java.net/~ysuenaga/JDK-8209790/webrev.00/</a><br>
 &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; In \
JDK 8 or earlier, some tools (jstack, jmap,<br> &gt;&gt;&gt;&gt;&gt;&gt; jinfo) \
can<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; connect to<br> &gt;&gt;&gt;&gt;&gt;&gt;  \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; debug server (jsadebugd). However it has \
not done<br> &gt;&gt;&gt;&gt;&gt;&gt; so since<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; JDK 9 \
because<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; jhsdb cannot accept the attach request \
to debug<br> &gt;&gt;&gt;&gt;&gt;&gt; server.<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; So I \
want to introduce new option `--remote` to<br> &gt;&gt;&gt;&gt;&gt;&gt; connect \
to<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; debug server.<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> \
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; I \
created CSR for this issue. So please review it<br> &gt;&gt;&gt;&gt;&gt;&gt; \
together.<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Thanks,<br> &gt;&gt;&gt;&gt;&gt;&gt;     \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Yasumasa<br> &gt;&gt;&gt;&gt;&gt;&gt;    \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; --<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Thanks,<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Jc<br> &gt;&gt;&gt;&gt;&gt;&gt;           \
&gt;&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;&gt;&gt;           &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           &gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
<br>
</blockquote></div>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic