8151709: jhsdb should show help message in SALauncher

Reviewed-by: dsamersoff
This commit is contained in:
Yasumasa Suenaga 2016-03-15 12:27:15 +09:00
parent 32165d2889
commit d472ac3c4a
2 changed files with 101 additions and 84 deletions

View File

@ -84,7 +84,11 @@ public class SAGetopt {
} }
else { else {
// Mixed style options --file name // Mixed style options --file name
extractOptarg(ca[0]); try {
extractOptarg(ca[0]);
} catch (ArrayIndexOutOfBoundsException e) {
throw new RuntimeException("Argument is expected for '" + ca[0] + "'");
}
} }
return ca[0]; return ca[0];

View File

@ -111,18 +111,53 @@ public class SALauncher {
return launcherHelp(); return launcherHelp();
} }
private static void buildAttachArgs(ArrayList<String> newArgs,
String pid, String exe, String core) {
if ((pid == null) && (exe == null)) {
throw new IllegalArgumentException(
"You have to set --pid or --exe.");
}
if (pid != null) { // Attach to live process
if (exe != null) {
throw new IllegalArgumentException(
"Unnecessary argument: --exe");
} else if (core != null) {
throw new IllegalArgumentException(
"Unnecessary argument: --core");
} else if (!pid.matches("^\\d+$")) {
throw new IllegalArgumentException("Invalid pid: " + pid);
}
newArgs.add(pid);
} else {
if (exe.length() == 0) {
throw new IllegalArgumentException("You have to set --exe.");
}
newArgs.add(exe);
if ((core == null) || (core.length() == 0)) {
throw new IllegalArgumentException("You have to set --core.");
}
newArgs.add(core);
}
}
private static void runCLHSDB(String[] oldArgs) { private static void runCLHSDB(String[] oldArgs) {
SAGetopt sg = new SAGetopt(oldArgs); SAGetopt sg = new SAGetopt(oldArgs);
String[] longOpts = {"exe=", "core=", "pid="}; String[] longOpts = {"exe=", "core=", "pid="};
ArrayList<String> newArgs = new ArrayList(); ArrayList<String> newArgs = new ArrayList();
String exeORpid = null; String pid = null;
String exe = null;
String core = null; String core = null;
String s = null; String s = null;
while((s = sg.next(null, longOpts)) != null) { while((s = sg.next(null, longOpts)) != null) {
if (s.equals("exe")) { if (s.equals("exe")) {
exeORpid = sg.getOptarg(); exe = sg.getOptarg();
continue; continue;
} }
if (s.equals("core")) { if (s.equals("core")) {
@ -130,17 +165,12 @@ public class SALauncher {
continue; continue;
} }
if (s.equals("pid")) { if (s.equals("pid")) {
exeORpid = sg.getOptarg(); pid = sg.getOptarg();
continue; continue;
} }
} }
if (exeORpid != null) { buildAttachArgs(newArgs, pid, exe, core);
newArgs.add(exeORpid);
if (core != null) {
newArgs.add(core);
}
}
CLHSDB.main(newArgs.toArray(new String[newArgs.size()])); CLHSDB.main(newArgs.toArray(new String[newArgs.size()]));
} }
@ -149,13 +179,14 @@ public class SALauncher {
String[] longOpts = {"exe=", "core=", "pid="}; String[] longOpts = {"exe=", "core=", "pid="};
ArrayList<String> newArgs = new ArrayList(); ArrayList<String> newArgs = new ArrayList();
String exeORpid = null; String pid = null;
String exe = null;
String core = null; String core = null;
String s = null; String s = null;
while((s = sg.next(null, longOpts)) != null) { while((s = sg.next(null, longOpts)) != null) {
if (s.equals("exe")) { if (s.equals("exe")) {
exeORpid = sg.getOptarg(); exe = sg.getOptarg();
continue; continue;
} }
if (s.equals("core")) { if (s.equals("core")) {
@ -163,17 +194,12 @@ public class SALauncher {
continue; continue;
} }
if (s.equals("pid")) { if (s.equals("pid")) {
exeORpid = sg.getOptarg(); pid = sg.getOptarg();
continue; continue;
} }
} }
if (exeORpid != null) { buildAttachArgs(newArgs, pid, exe, core);
newArgs.add(exeORpid);
if (core != null) {
newArgs.add(core);
}
}
HSDB.main(newArgs.toArray(new String[newArgs.size()])); HSDB.main(newArgs.toArray(new String[newArgs.size()]));
} }
@ -183,13 +209,14 @@ public class SALauncher {
"mixed", "locks"}; "mixed", "locks"};
ArrayList<String> newArgs = new ArrayList(); ArrayList<String> newArgs = new ArrayList();
String exeORpid = null; String pid = null;
String exe = null;
String core = null; String core = null;
String s = null; String s = null;
while((s = sg.next(null, longOpts)) != null) { while((s = sg.next(null, longOpts)) != null) {
if (s.equals("exe")) { if (s.equals("exe")) {
exeORpid = sg.getOptarg(); exe = sg.getOptarg();
continue; continue;
} }
if (s.equals("core")) { if (s.equals("core")) {
@ -197,7 +224,7 @@ public class SALauncher {
continue; continue;
} }
if (s.equals("pid")) { if (s.equals("pid")) {
exeORpid = sg.getOptarg(); pid = sg.getOptarg();
continue; continue;
} }
if (s.equals("mixed")) { if (s.equals("mixed")) {
@ -210,13 +237,7 @@ public class SALauncher {
} }
} }
if (exeORpid != null) { buildAttachArgs(newArgs, pid, exe, core);
newArgs.add(exeORpid);
if (core != null) {
newArgs.add(core);
}
}
JStack.main(newArgs.toArray(new String[newArgs.size()])); JStack.main(newArgs.toArray(new String[newArgs.size()]));
} }
@ -226,13 +247,14 @@ public class SALauncher {
"heap", "binaryheap", "histo", "clstats", "finalizerinfo"}; "heap", "binaryheap", "histo", "clstats", "finalizerinfo"};
ArrayList<String> newArgs = new ArrayList(); ArrayList<String> newArgs = new ArrayList();
String exeORpid = null; String pid = null;
String exe = null;
String core = null; String core = null;
String s = null; String s = null;
while((s = sg.next(null, longOpts)) != null) { while((s = sg.next(null, longOpts)) != null) {
if (s.equals("exe")) { if (s.equals("exe")) {
exeORpid = sg.getOptarg(); exe = sg.getOptarg();
continue; continue;
} }
if (s.equals("core")) { if (s.equals("core")) {
@ -240,7 +262,7 @@ public class SALauncher {
continue; continue;
} }
if (s.equals("pid")) { if (s.equals("pid")) {
exeORpid = sg.getOptarg(); pid = sg.getOptarg();
continue; continue;
} }
if (s.equals("heap")) { if (s.equals("heap")) {
@ -265,13 +287,7 @@ public class SALauncher {
} }
} }
if (exeORpid != null) { buildAttachArgs(newArgs, pid, exe, core);
newArgs.add(exeORpid);
if (core != null) {
newArgs.add(core);
}
}
JMap.main(newArgs.toArray(new String[newArgs.size()])); JMap.main(newArgs.toArray(new String[newArgs.size()]));
} }
@ -281,13 +297,14 @@ public class SALauncher {
"flags", "sysprops"}; "flags", "sysprops"};
ArrayList<String> newArgs = new ArrayList(); ArrayList<String> newArgs = new ArrayList();
String exeORpid = null; String exe = null;
String pid = null;
String core = null; String core = null;
String s = null; String s = null;
while((s = sg.next(null, longOpts)) != null) { while((s = sg.next(null, longOpts)) != null) {
if (s.equals("exe")) { if (s.equals("exe")) {
exeORpid = sg.getOptarg(); exe = sg.getOptarg();
continue; continue;
} }
if (s.equals("core")) { if (s.equals("core")) {
@ -295,7 +312,7 @@ public class SALauncher {
continue; continue;
} }
if (s.equals("pid")) { if (s.equals("pid")) {
exeORpid = sg.getOptarg(); pid = sg.getOptarg();
continue; continue;
} }
if (s.equals("flags")) { if (s.equals("flags")) {
@ -308,13 +325,7 @@ public class SALauncher {
} }
} }
if (exeORpid != null) { buildAttachArgs(newArgs, pid, exe, core);
newArgs.add(exeORpid);
if (core != null) {
newArgs.add(core);
}
}
JInfo.main(newArgs.toArray(new String[newArgs.size()])); JInfo.main(newArgs.toArray(new String[newArgs.size()]));
} }
@ -323,13 +334,14 @@ public class SALauncher {
String[] longOpts = {"exe=", "core=", "pid="}; String[] longOpts = {"exe=", "core=", "pid="};
ArrayList<String> newArgs = new ArrayList(); ArrayList<String> newArgs = new ArrayList();
String exeORpid = null; String exe = null;
String pid = null;
String core = null; String core = null;
String s = null; String s = null;
while((s = sg.next(null, longOpts)) != null) { while((s = sg.next(null, longOpts)) != null) {
if (s.equals("exe")) { if (s.equals("exe")) {
exeORpid = sg.getOptarg(); exe = sg.getOptarg();
continue; continue;
} }
if (s.equals("core")) { if (s.equals("core")) {
@ -337,18 +349,12 @@ public class SALauncher {
continue; continue;
} }
if (s.equals("pid")) { if (s.equals("pid")) {
exeORpid = sg.getOptarg(); pid = sg.getOptarg();
continue; continue;
} }
} }
if (exeORpid != null) { buildAttachArgs(newArgs, pid, exe, core);
newArgs.add(exeORpid);
if (core != null) {
newArgs.add(core);
}
}
JSnap.main(newArgs.toArray(new String[newArgs.size()])); JSnap.main(newArgs.toArray(new String[newArgs.size()]));
} }
@ -373,36 +379,43 @@ public class SALauncher {
String[] oldArgs = Arrays.copyOfRange(args, 1, args.length); String[] oldArgs = Arrays.copyOfRange(args, 1, args.length);
// Run SA interactive mode try {
if (args[0].equals("clhsdb")) { // Run SA interactive mode
runCLHSDB(oldArgs); if (args[0].equals("clhsdb")) {
return; runCLHSDB(oldArgs);
} return;
}
if (args[0].equals("hsdb")) { if (args[0].equals("hsdb")) {
runHSDB(oldArgs); runHSDB(oldArgs);
return; return;
} }
// Run SA tmtools mode // Run SA tmtools mode
if (args[0].equals("jstack")) { if (args[0].equals("jstack")) {
runJSTACK(oldArgs); runJSTACK(oldArgs);
return; return;
} }
if (args[0].equals("jmap")) { if (args[0].equals("jmap")) {
runJMAP(oldArgs); runJMAP(oldArgs);
return; return;
} }
if (args[0].equals("jinfo")) { if (args[0].equals("jinfo")) {
runJINFO(oldArgs); runJINFO(oldArgs);
return; return;
} }
if (args[0].equals("jsnap")) { if (args[0].equals("jsnap")) {
runJSNAP(oldArgs); runJSNAP(oldArgs);
return; return;
}
throw new IllegalArgumentException("Unknown tool: " + args[0]);
} catch (Exception e) {
System.err.println(e.getMessage());
toolHelp(args[0]);
} }
} }
} }