agent/src/share/classes/sun/jvm/hotspot/HSDB.java

Print this page

        

*** 57,68 **** --- 57,71 ---- //-------------------------------------------------------------------------------- // Internals only below this point // private HotSpotAgent agent; + private JVMDebugger jvmDebugger; private JDesktopPane desktop; private boolean attached; + private boolean argError; + private JFrame frame; /** List <JMenuItem> */ private java.util.List attachMenuItems; /** List <JMenuItem> */ private java.util.List detachMenuItems; private JMenu toolsMenu;
*** 83,103 **** System.out.println(" pid: attach to the process whose id is 'pid'"); System.out.println(" path-to-java-executable: Debug a core file produced by this program"); System.out.println(" path-to-corefile: Debug this corefile. The default is 'core'"); System.out.println(" If no arguments are specified, you can select what to do from the GUI.\n"); HotSpotAgent.showUsage(); } private HSDB(String[] args) { switch (args.length) { case (0): break; case (1): if (args[0].equals("help") || args[0].equals("-help")) { doUsage(); - System.exit(0); } // If all numbers, it is a PID to attach to // Else, it is a pathname to a .../bin/java for a core file. try { int unused = Integer.parseInt(args[0]); --- 86,110 ---- System.out.println(" pid: attach to the process whose id is 'pid'"); System.out.println(" path-to-java-executable: Debug a core file produced by this program"); System.out.println(" path-to-corefile: Debug this corefile. The default is 'core'"); System.out.println(" If no arguments are specified, you can select what to do from the GUI.\n"); HotSpotAgent.showUsage(); + argError = true; + } + + public HSDB(JVMDebugger d) { + jvmDebugger = d; } private HSDB(String[] args) { switch (args.length) { case (0): break; case (1): if (args[0].equals("help") || args[0].equals("-help")) { doUsage(); } // If all numbers, it is a PID to attach to // Else, it is a pathname to a .../bin/java for a core file. try { int unused = Integer.parseInt(args[0]);
*** 115,142 **** break; default: System.out.println("HSDB Error: Too many options specified"); doUsage(); - System.exit(1); } } ! private void run() { ! // At this point, if pidText != null we are supposed to attach to it. ! // Else, if execPath != null, it is the path of a jdk/bin/java ! // and coreFilename is the pathname of a core file we are ! // supposed to attach to. agent = new HotSpotAgent(); workerThread = new WorkerThread(); attachMenuItems = new java.util.ArrayList(); detachMenuItems = new java.util.ArrayList(); ! JFrame frame = new JFrame("HSDB - HotSpot Debugger"); frame.setSize(800, 600); ! frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); JMenuBar menuBar = new JMenuBar(); // // File menu --- 122,154 ---- break; default: System.out.println("HSDB Error: Too many options specified"); doUsage(); } } ! // close this tool without calling System.exit ! protected void closeUI() { ! workerThread.shutdown(); ! frame.dispose(); ! } ! ! public void run() { ! // Don't start the UI if there were bad arguments. ! if (argError) { ! return; ! } agent = new HotSpotAgent(); workerThread = new WorkerThread(); attachMenuItems = new java.util.ArrayList(); detachMenuItems = new java.util.ArrayList(); ! frame = new JFrame("HSDB - HotSpot Debugger"); frame.setSize(800, 600); ! frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); JMenuBar menuBar = new JMenuBar(); // // File menu
*** 195,205 **** menu.addSeparator(); item = createMenuItem("Exit", new ActionListener() { public void actionPerformed(ActionEvent e) { ! System.exit(0); } }); item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.ALT_MASK)); item.setMnemonic(KeyEvent.VK_X); menu.add(item); --- 207,217 ---- menu.addSeparator(); item = createMenuItem("Exit", new ActionListener() { public void actionPerformed(ActionEvent e) { ! closeUI(); } }); item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.ALT_MASK)); item.setMnemonic(KeyEvent.VK_X); menu.add(item);
*** 404,414 **** public void run() { detachDebugger(); } }); ! if (pidText != null) { attach(pidText); } else if (execPath != null) { attach(execPath, coreFilename); } } --- 416,434 ---- public void run() { detachDebugger(); } }); ! // If jvmDebugger is already set, we have been given a JVMDebugger. ! // Otherwise, if pidText != null we are supposed to attach to it. ! // Finally, if execPath != null, it is the path of a jdk/bin/java ! // and coreFilename is the pathname of a core file we are ! // supposed to attach to. ! ! if (jvmDebugger != null) { ! attach(jvmDebugger); ! } else if (pidText != null) { attach(pidText); } else if (execPath != null) { attach(execPath, coreFilename); } }
*** 1111,1120 **** --- 1131,1146 ---- annoPanel.repaint(); } }); } + // Attach to existing JVMDebugger, which should be already attached to a core/process. + private void attach(JVMDebugger d) { + attached = true; + showThreadsDialog(); + } + /** NOTE we are in a different thread here than either the main thread or the Swing/AWT event handler thread, so we must be very careful when creating or removing widgets */ private void attach(String pidText) { try {