From e6528844afd54ef4f55390d4710c6513d87b530d Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Sun, 12 Apr 2009 21:01:49 +0000 Subject: [PATCH] 2009-04-12 Zoltan Varga * mono-gdb.py (MonoMethodPrinter.to_string): Add a MonoMethod* pretty printer. svn path=/trunk/mono/; revision=131553 --- data/gdb/ChangeLog | 5 +++++ data/gdb/mono-gdb.py | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/data/gdb/ChangeLog b/data/gdb/ChangeLog index afadbe0c76e..f88aeabf9c5 100644 --- a/data/gdb/ChangeLog +++ b/data/gdb/ChangeLog @@ -1,3 +1,8 @@ +2009-04-12 Zoltan Varga + + * mono-gdb.py (MonoMethodPrinter.to_string): Add a MonoMethod* pretty + printer. + 2009-04-10 Zoltan Varga * mono-gdb.py: Update to the latest archer api. diff --git a/data/gdb/mono-gdb.py b/data/gdb/mono-gdb.py index 54a9cee28a0..8325b8a4f9f 100644 --- a/data/gdb/mono-gdb.py +++ b/data/gdb/mono-gdb.py @@ -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): -- 2.25.1