Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorZoltan Varga <vargaz@gmail.com>2009-04-07 00:42:42 +0400
committerZoltan Varga <vargaz@gmail.com>2009-04-07 00:42:42 +0400
commitffd56e643465ffd8b1adc8c77d7de608352281a3 (patch)
treed23320c960268326befca737e22bf4ae95f91b2f /data
parent89c0ea6ce46fde348c894a10ed04019d1ae865b2 (diff)
2009-04-06 Zoltan Varga <vargaz@gmail.com>
* mono-gdb.py: Update after the changes to dwarfwriter.c. svn path=/trunk/mono/; revision=131158
Diffstat (limited to 'data')
-rw-r--r--data/gdb/ChangeLog4
-rw-r--r--data/gdb/mono-gdb.py24
2 files changed, 21 insertions, 7 deletions
diff --git a/data/gdb/ChangeLog b/data/gdb/ChangeLog
index 07f4a499bfd..b251d04f959 100644
--- a/data/gdb/ChangeLog
+++ b/data/gdb/ChangeLog
@@ -1,3 +1,7 @@
+2009-04-06 Zoltan Varga <vargaz@gmail.com>
+
+ * mono-gdb.py: Update after the changes to dwarfwriter.c.
+
2009-04-05 Zoltan Varga <vargaz@gmail.com>
* mono-gdb.py: Handle superclasses in the pretty printer.
diff --git a/data/gdb/mono-gdb.py b/data/gdb/mono-gdb.py
index 5102d1eada1..c53e1a11083 100644
--- a/data/gdb/mono-gdb.py
+++ b/data/gdb/mono-gdb.py
@@ -68,7 +68,10 @@ class ObjectPrinter:
"Print a C# object"
def __init__(self, val):
- self.val = val
+ if str(val.type ())[-1] == "&":
+ self.val = val.address ().cast (gdb.Type ("MonoObject").pointer ())
+ else:
+ self.val = val.cast (gdb.Type ("MonoObject").pointer ())
class _iterator:
def __init__(self,obj):
@@ -89,7 +92,7 @@ class ObjectPrinter:
return (field.name, self.obj [field.name])
except:
# Superclass
- return (field.name, self.obj.cast (gdb.Type ("struct %s" % (field.name))))
+ return (field.name, self.obj.cast (gdb.Type ("%s" % (field.name))))
def children(self):
# FIXME: It would be easier if gdb.Value would support iteration itself
@@ -97,19 +100,23 @@ class ObjectPrinter:
if int(self.val.cast (gdb.Type ("guint64"))) == 0:
return {}.__iter__ ()
try:
- obj = self.val.cast (gdb.Type ("MonoObject").pointer ()).dereference ()
+ obj = self.val.dereference ()
class_ns = obj ['vtable'].dereference ()['klass'].dereference ()['name_space'].string ()
class_name = obj ['vtable'].dereference ()['klass'].dereference ()['name'].string ()
- gdb_type = gdb.Type ("struct %s.%s" % (class_ns, class_name))
+ if class_name [-2:len(class_name)] == "[]":
+ return {}.__iter__ ()
+ gdb_type = gdb.Type ("struct %s_%s" % (class_ns.replace (".", "_"), class_name))
return self._iterator(obj.cast (gdb_type))
except:
+ print sys.exc_info ()[0]
+ print sys.exc_info ()[1]
return {}.__iter__ ()
def to_string(self):
if int(self.val.cast (gdb.Type ("guint64"))) == 0:
return "null"
try:
- obj = self.val.cast (gdb.Type ("MonoObject").pointer ()).dereference ()
+ obj = self.val.dereference ()
class_ns = obj ['vtable'].dereference ()['klass'].dereference ()['name_space'].string ()
class_name = obj ['vtable'].dereference ()['klass'].dereference ()['name'].string ()
if class_ns == "System" and class_name == "String":
@@ -132,9 +139,12 @@ class ObjectPrinter:
return self.val.cast (gdb.Type ("guint64"))
def lookup_pretty_printer(val):
- if str (val.type ()) == "object":
+ t = str (val.type ())
+ if t == "object":
return ObjectPrinter (val)
- if str (val.type ()) == "string":
+ if t[0:5] == "class" and t[-1] == "&":
+ return ObjectPrinter (val)
+ if t == "string":
return StringPrinter (val)
return None