#
# Copyright (c) 2007, 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
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#   
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#  
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#   
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#  
#

These scripts may be used to start SA debug server for SA/JDI
purpose. The SADebugServerAttachingConnector will connect to
SADebugServer.

How to use?

Before starting remote debug server, make sure that the environment
variable JAVA_HOME points to the pathname of a J2SE 1.5.

step 1: Start the rmiregistry server using one of the following
        commands as appropriate:

        start-rmiregistry.sh &
        start-rmiregistry64.sh &
        start-rmiregistry.bat 

step 2: For live process case, use one of the following commands
        as appropriate:

        start-debug-server.sh <pid of java process>
        start-debug-server64.sh <pid of 64 bit java process>
        start-debug-server.bat <pid of java process>

        For core file case, use one of the following commands as
        appropriate:

        start-debug-server.sh <path of java executable> <core file path>
        start-debug-server64.sh <path of java executable> <core file path>
        start-debug-server.bat <path of java executable> <core file path>
