2009-04-12 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Sun, 12 Apr 2009 21:01:49 +0000 (21:01 -0000)
committerZoltan Varga <vargaz@gmail.com>
Sun, 12 Apr 2009 21:01:49 +0000 (21:01 -0000)
* mono-gdb.py (MonoMethodPrinter.to_string): Add a MonoMethod* pretty
printer.

svn path=/trunk/mono/; revision=131553

data/gdb/ChangeLog
data/gdb/mono-gdb.py

index afadbe0c76e9a48a7b11677eb43a1154e53ac04c..f88aeabf9c5a78e96d4c63188dfcb04b252a0275 100644 (file)
@@ -1,3 +1,8 @@
+2009-04-12  Zoltan Varga  <vargaz@gmail.com>
+
+       * mono-gdb.py (MonoMethodPrinter.to_string): Add a MonoMethod* pretty
+       printer.
+
 2009-04-10  Zoltan Varga  <vargaz@gmail.com>
 
        * mono-gdb.py: Update to the latest archer api.
index 54a9cee28a0181d75f13e0afbf559fddab6a5ac5..8325b8a4f9fc57fd7426693d421c8c980a7d64b3 100644 (file)
@@ -140,6 +140,22 @@ class ObjectPrinter:
             print sys.exc_info ()[1]
             # FIXME: This can happen because we don't have liveness information
             return self.val.cast (gdb.lookup_type ("guint64"))
+        
+class MonoMethodPrinter:
+    "Print a MonoMethod structure"
+
+    def __init__(self, val):
+        self.val = val
+
+    def to_string(self):
+        if int(self.val.cast (gdb.lookup_type ("guint64"))) == 0:
+            return "0x0"
+        val = self.val.dereference ()
+        klass = val ["klass"].dereference ()
+        class_name = stringify_class_name (klass ["name_space"].string (), klass ["name"].string ())
+        return "\"%s:%s ()\"" % (class_name, val ["name"].string ())
+        # This returns more info but requires calling into the inferior
+        #return "\"%s\"" % (gdb.parse_and_eval ("mono_method_full_name (%s, 1)" % (str (int (self.val.cast (gdb.lookup_type ("guint64")))))).string ())
 
 def lookup_pretty_printer(val):
     t = str (val.type)
@@ -149,6 +165,8 @@ def lookup_pretty_printer(val):
         return ObjectPrinter (val)    
     if t == "string":
         return StringPrinter (val)
+    if t == "MonoMethod *":
+        return MonoMethodPrinter (val)
     return None
 
 def register_csharp_printers(obj):