src/share/classes/sun/tools/jstack/JStack.java

Print this page
rev 8717 : 8027765: Make exit codes and stdout/stderr printing from jmap/jinfo/jstack/jps consistent
Reviewed-by:

*** 40,50 **** * obtained the thread dump from a target process using the VM attach mechanism */ public class JStack { public static void main(String[] args) throws Exception { if (args.length == 0) { ! usage(); // no arguments } boolean useSA = false; boolean mixed = false; boolean locks = false; --- 40,50 ---- * obtained the thread dump from a target process using the VM attach mechanism */ public class JStack { public static void main(String[] args) throws Exception { if (args.length == 0) { ! usage(1); // no arguments } boolean useSA = false; boolean mixed = false; boolean locks = false;
*** 54,73 **** while (optionCount < args.length) { String arg = args[optionCount]; if (!arg.startsWith("-")) { break; } ! if (arg.equals("-F")) { useSA = true; ! } else { if (arg.equals("-m")) { mixed = true; } else { if (arg.equals("-l")) { locks = true; } else { ! usage(); } } } optionCount++; } --- 54,77 ---- while (optionCount < args.length) { String arg = args[optionCount]; if (!arg.startsWith("-")) { break; } ! if (arg.equals("-help") || arg.equals("-h")) { ! usage(0); ! } ! else if (arg.equals("-F")) { useSA = true; ! } ! else { if (arg.equals("-m")) { mixed = true; } else { if (arg.equals("-l")) { locks = true; } else { ! usage(1); } } } optionCount++; }
*** 79,89 **** // Next we check the parameter count. If there are two parameters // we assume core file and executable so we use SA. int paramCount = args.length - optionCount; if (paramCount == 0 || paramCount > 2) { ! usage(); } if (paramCount == 2) { useSA = true; } else { // If we can't parse it as a pid then it must be debug server --- 83,93 ---- // Next we check the parameter count. If there are two parameters // we assume core file and executable so we use SA. int paramCount = args.length - optionCount; if (paramCount == 0 || paramCount > 2) { ! usage(1); } if (paramCount == 2) { useSA = true; } else { // If we can't parse it as a pid then it must be debug server
*** 116,126 **** // SA JStack tool private static void runJStackTool(boolean mixed, boolean locks, String args[]) throws Exception { Class<?> cl = loadSAClass(); if (cl == null) { ! usage(); // SA not available } // JStack tool also takes -m and -l arguments if (mixed) { args = prepend("-m", args); --- 120,130 ---- // SA JStack tool private static void runJStackTool(boolean mixed, boolean locks, String args[]) throws Exception { Class<?> cl = loadSAClass(); if (cl == null) { ! usage(1); // SA not available } // JStack tool also takes -m and -l arguments if (mixed) { args = prepend("-m", args);
*** 197,229 **** System.arraycopy(args, 0, newargs, 1, args.length); return newargs; } // print usage message ! private static void usage() { ! System.out.println("Usage:"); ! System.out.println(" jstack [-l] <pid>"); ! System.out.println(" (to connect to running process)"); if (loadSAClass() != null) { ! System.out.println(" jstack -F [-m] [-l] <pid>"); ! System.out.println(" (to connect to a hung process)"); ! System.out.println(" jstack [-m] [-l] <executable> <core>"); ! System.out.println(" (to connect to a core file)"); ! System.out.println(" jstack [-m] [-l] [server_id@]<remote server IP or hostname>"); ! System.out.println(" (to connect to a remote debug server)"); } ! System.out.println(""); ! System.out.println("Options:"); if (loadSAClass() != null) { ! System.out.println(" -F to force a thread dump. Use when jstack <pid> does not respond" + " (process is hung)"); ! System.out.println(" -m to print both java and native frames (mixed mode)"); } ! System.out.println(" -l long listing. Prints additional information about locks"); ! System.out.println(" -h or -help to print this help message"); ! System.exit(1); } } --- 201,233 ---- System.arraycopy(args, 0, newargs, 1, args.length); return newargs; } // print usage message ! private static void usage(int exit) { ! System.err.println("Usage:"); ! System.err.println(" jstack [-l] <pid>"); ! System.err.println(" (to connect to running process)"); if (loadSAClass() != null) { ! System.err.println(" jstack -F [-m] [-l] <pid>"); ! System.err.println(" (to connect to a hung process)"); ! System.err.println(" jstack [-m] [-l] <executable> <core>"); ! System.err.println(" (to connect to a core file)"); ! System.err.println(" jstack [-m] [-l] [server_id@]<remote server IP or hostname>"); ! System.err.println(" (to connect to a remote debug server)"); } ! System.err.println(""); ! System.err.println("Options:"); if (loadSAClass() != null) { ! System.err.println(" -F to force a thread dump. Use when jstack <pid> does not respond" + " (process is hung)"); ! System.err.println(" -m to print both java and native frames (mixed mode)"); } ! System.err.println(" -l long listing. Prints additional information about locks"); ! System.err.println(" -h or -help to print this help message"); ! System.exit(exit); } }