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 {