# HG changeset patch # User dsamersoff # Date 1470055138 -10800 # Node ID 3b8101f0fd6528910b7bebe88d32d4ebcbb21e5a # Parent a9b665f0879fe056558f4caf1af5602cc0b47839 8160817: Add jsadebugd functionality to jhsdb Summary: add jsadebugd functionality to jhsdb Reviewed-by: dsamersoff Contributed-by: sharath.ballal@oracle.com diff -r a9b665f0879f -r 3b8101f0fd65 hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/SALauncher.java --- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/SALauncher.java Mon Aug 01 10:51:22 2016 +0300 +++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/SALauncher.java Mon Aug 01 15:38:58 2016 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,7 @@ private static boolean launcherHelp() { System.out.println(" clhsdb \tcommand line debugger"); + System.out.println(" debugd \tdebug server"); System.out.println(" hsdb \tui debugger"); System.out.println(" jstack --help\tto get more information"); System.out.println(" jmap --help\tto get more information"); @@ -54,6 +55,21 @@ return false; } + private static boolean debugdHelp() { + // [options] [server-id] + // [options] [server-id] + java.io.PrintStream out = System.out; + out.print(" [option] [server-id]"); + out.println("\t\t(to connect to a live java process)"); + out.print(" or [option] [server-id]"); + out.println("\t\t(to connect to a core file produced by )"); + out.print("\t\tserver-id is an optional unique id for this debug server, needed "); + out.println("\t\tif multiple debug servers are run on the same machine"); + out.println("where option includes:"); + out.println(" -h | -help\tto print this help message"); + return false; + } + private static boolean jinfoHelp() { // --flags -> -flags // --sysprops -> -sysprops @@ -106,6 +122,9 @@ if (toolName.equals("jsnap")) { return jsnapHelp(); } + if (toolName.equals("debugd")) { + return debugdHelp(); + } if (toolName.equals("hsdb") || toolName.equals("clhsdb")) { return commonHelp(); } @@ -377,13 +396,28 @@ JSnap.main(newArgs.toArray(new String[newArgs.size()])); } + private static void runDEBUGD(String[] oldArgs) { + if ((oldArgs.length < 1) || (oldArgs.length > 3)) { + debugdHelp(); + } + + // 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"); + + // delegate to the actual SA debug server. + sun.jvm.hotspot.DebugServer.main(oldArgs); + } + public static void main(String[] args) { // Provide a help if (args.length == 0) { launcherHelp(); return; } - // No arguments imply help for jstack, jmap, jinfo but launch clhsdb and hsdb + // No arguments imply help for debugd, jstack, jmap, jinfo but launch clhsdb and hsdb if (args.length == 1 && !args[0].equals("clhsdb") && !args[0].equals("hsdb")) { toolHelp(args[0]); return; @@ -431,6 +465,11 @@ return; } + if (args[0].equals("debugd")) { + runDEBUGD(oldArgs); + return; + } + throw new SAGetoptException("Unknown tool: " + args[0]); } catch (SAGetoptException e) { System.err.println(e.getMessage());