prims.cc (remoteDebug): New global.
* prims.cc (remoteDebug): New global. (jdwpOptions): New global. (parse_x_arg): Add processing for "X" options "debug" and "runjdwp:" (_Jv_RunMain): If debugging, start up JDWP backend. Send VM_INIT and VM_DEATH when appropriate. From-SVN: r116383
This commit is contained in:
parent
c9cbfca6f5
commit
b8caf93e7d
@ -1,3 +1,12 @@
|
|||||||
|
2006-08-24 Keith Seitz <keiths@redhat.com>
|
||||||
|
|
||||||
|
* prims.cc (remoteDebug): New global.
|
||||||
|
(jdwpOptions): New global.
|
||||||
|
(parse_x_arg): Add processing for "X" options "debug" and
|
||||||
|
"runjdwp:"
|
||||||
|
(_Jv_RunMain): If debugging, start up JDWP backend.
|
||||||
|
Send VM_INIT and VM_DEATH when appropriate.
|
||||||
|
|
||||||
2006-08-23 Keith Seitz <keiths@redhat.com>
|
2006-08-23 Keith Seitz <keiths@redhat.com>
|
||||||
|
|
||||||
* gnu/classpath/jdwp/VMVirtualMachine.java
|
* gnu/classpath/jdwp/VMVirtualMachine.java
|
||||||
|
@ -64,6 +64,10 @@ details. */
|
|||||||
#include <gnu/gcj/runtime/ExtensionClassLoader.h>
|
#include <gnu/gcj/runtime/ExtensionClassLoader.h>
|
||||||
#include <gnu/gcj/runtime/FinalizerThread.h>
|
#include <gnu/gcj/runtime/FinalizerThread.h>
|
||||||
#include <execution.h>
|
#include <execution.h>
|
||||||
|
#include <gnu/classpath/jdwp/Jdwp.h>
|
||||||
|
#include <gnu/classpath/jdwp/VMVirtualMachine.h>
|
||||||
|
#include <gnu/classpath/jdwp/event/VmDeathEvent.h>
|
||||||
|
#include <gnu/classpath/jdwp/event/VmInitEvent.h>
|
||||||
#include <gnu/java/lang/MainThread.h>
|
#include <gnu/java/lang/MainThread.h>
|
||||||
|
|
||||||
#ifdef USE_LTDL
|
#ifdef USE_LTDL
|
||||||
@ -98,6 +102,10 @@ property_pair *_Jv_Environment_Properties;
|
|||||||
const char **_Jv_argv;
|
const char **_Jv_argv;
|
||||||
int _Jv_argc;
|
int _Jv_argc;
|
||||||
|
|
||||||
|
// Debugging options
|
||||||
|
static bool remoteDebug = false;
|
||||||
|
static char *jdwpOptions = "";
|
||||||
|
|
||||||
// Argument support.
|
// Argument support.
|
||||||
int
|
int
|
||||||
_Jv_GetNbArgs (void)
|
_Jv_GetNbArgs (void)
|
||||||
@ -1138,7 +1146,18 @@ parse_x_arg (char* option_string)
|
|||||||
}
|
}
|
||||||
else if (! strcmp (option_string, "debug"))
|
else if (! strcmp (option_string, "debug"))
|
||||||
{
|
{
|
||||||
// FIXME: add JDWP/JVMDI support
|
remoteDebug = true;
|
||||||
|
}
|
||||||
|
else if (! strncmp (option_string, "runjdwp:", 8))
|
||||||
|
{
|
||||||
|
if (strlen (option_string) > 8)
|
||||||
|
jdwpOptions = &option_string[8];
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"libgcj: argument required for JDWP options");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (! strncmp (option_string, "bootclasspath:", 14))
|
else if (! strncmp (option_string, "bootclasspath:", 14))
|
||||||
{
|
{
|
||||||
@ -1519,6 +1538,26 @@ _Jv_RunMain (JvVMInitArgs *vm_args, jclass klass, const char *name, int argc,
|
|||||||
else
|
else
|
||||||
main_thread = new MainThread (JvNewStringUTF (name),
|
main_thread = new MainThread (JvNewStringUTF (name),
|
||||||
arg_vec, is_jar);
|
arg_vec, is_jar);
|
||||||
|
_Jv_AttachCurrentThread (main_thread);
|
||||||
|
|
||||||
|
// Start JDWP
|
||||||
|
if (remoteDebug)
|
||||||
|
{
|
||||||
|
using namespace gnu::classpath::jdwp;
|
||||||
|
VMVirtualMachine::initialize ();
|
||||||
|
Jdwp *jdwp = new Jdwp ();
|
||||||
|
jdwp->setDaemon (true);
|
||||||
|
jdwp->configure (JvNewStringLatin1 (jdwpOptions));
|
||||||
|
jdwp->start ();
|
||||||
|
|
||||||
|
// Wait for JDWP to initialize and start
|
||||||
|
jdwp->join ();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send VmInit
|
||||||
|
gnu::classpath::jdwp::event::VmInitEvent *event;
|
||||||
|
event = new gnu::classpath::jdwp::event::VmInitEvent (main_thread);
|
||||||
|
gnu::classpath::jdwp::Jdwp::notify (event);
|
||||||
}
|
}
|
||||||
catch (java::lang::Throwable *t)
|
catch (java::lang::Throwable *t)
|
||||||
{
|
{
|
||||||
@ -1531,9 +1570,16 @@ _Jv_RunMain (JvVMInitArgs *vm_args, jclass klass, const char *name, int argc,
|
|||||||
::exit (1);
|
::exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
_Jv_AttachCurrentThread (main_thread);
|
|
||||||
_Jv_ThreadRun (main_thread);
|
_Jv_ThreadRun (main_thread);
|
||||||
|
|
||||||
|
// Notify debugger of VM's death
|
||||||
|
if (gnu::classpath::jdwp::Jdwp::isDebugging)
|
||||||
|
{
|
||||||
|
using namespace gnu::classpath::jdwp;
|
||||||
|
event::VmDeathEvent *event = new event::VmDeathEvent ();
|
||||||
|
Jdwp::notify (event);
|
||||||
|
}
|
||||||
|
|
||||||
// If we got here then something went wrong, as MainThread is not
|
// If we got here then something went wrong, as MainThread is not
|
||||||
// supposed to terminate.
|
// supposed to terminate.
|
||||||
::exit (1);
|
::exit (1);
|
||||||
|
Loading…
Reference in New Issue
Block a user