2009-05-13 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / mini / debug-debugger.c
index 35d70f11e1c31f5585eca008320835dd23626958..b76d4d52a2ca5b57ca2dc56ed692967c7cb07a12 100644 (file)
@@ -118,7 +118,9 @@ extern void MONO_DEBUGGER__notification_function (guint64 command, guint64 data,
  */
 MonoDebuggerInfo MONO_DEBUGGER__debugger_info = {
        MONO_DEBUGGER_MAGIC,
-       MONO_DEBUGGER_VERSION,
+       MONO_DEBUGGER_MAJOR_VERSION,
+       MONO_DEBUGGER_MINOR_VERSION,
+       0, /* dummy */
        sizeof (MonoDebuggerInfo),
        sizeof (MonoSymbolTable),
        MONO_TRAMPOLINE_NUM,
@@ -164,7 +166,8 @@ MonoDebuggerInfo MONO_DEBUGGER__debugger_info = {
        &mono_debugger_event_handler,
        debugger_event_handler,
 
-       &_mono_debug_using_mono_debugger
+       &_mono_debug_using_mono_debugger,
+       (gint32*)&_mono_debugger_interruption_request
 };
 
 static guint64
@@ -239,6 +242,7 @@ debugger_lookup_class (guint64 image_argument, G_GNUC_UNUSED guint64 dummy,
                return -1;
 
        mono_class_init (klass);
+       mono_class_setup_methods (klass);
        return (gint64) (gssize) klass;
 }
 
@@ -304,7 +308,7 @@ debugger_insert_source_breakpoint (guint64 image_argument, guint64 token, guint6
        mono_debugger_lock ();
 
        klass = mono_debugger_register_class_init_callback (image, class_name, token, index);
-       if (!klass) {
+       if (!klass || !klass->inited || !klass->methods) {
                mono_debugger_unlock ();
                return 0;
        }
@@ -336,7 +340,7 @@ debugger_insert_source_breakpoint (guint64 image_argument, guint64 token, guint6
                        method = nm;
                }
 
-               info = mono_debugger_insert_method_breakpoint (method, index);
+               info = mono_debug_lookup_method_addresses (method);
                mono_debugger_unlock ();
                return (guint64) (gsize) info;
        }
@@ -350,6 +354,7 @@ debugger_remove_breakpoint (guint64 index, G_GNUC_UNUSED guint64 dummy)
 {
        mono_debugger_lock ();
        mono_debugger_remove_method_breakpoint (index);
+       mono_debugger_remove_class_init_callback (index);
        mono_debugger_unlock ();
 }
 
@@ -432,12 +437,16 @@ debugger_init_threads (void)
        gc_thread_vtable = &debugger_thread_vtable;
 }
 
+#if 0
+
 static void
 debugger_finalize_threads (void)
 {
        gc_thread_vtable = NULL;
 }
 
+#endif
+
 static guint64
 debugger_init_code_buffer (void)
 {