Quellcode durchsuchen

add a first draft for a gdb pretty-printer

Julius Pfrommer vor 7 Jahren
Ursprung
Commit
bc176c579d
1 geänderte Dateien mit 70 neuen und 0 gelöschten Zeilen
  1. 70 0
      tools/gdb-prettyprint.py

+ 70 - 0
tools/gdb-prettyprint.py

@@ -0,0 +1,70 @@
+# WARNING: This is till work in progress
+#
+# Load into gdb with 'source ../tools/gdb-prettyprint.py'
+# Make sure to also apply 'set print pretty on' to get nice structure printouts
+
+class String:
+    def __init__(self, val):
+        self.val = val
+
+    def to_string (self):
+        length = int(self.val['length'])
+        data = self.val['data']
+
+        if int(data) == 0:
+            return "UA_STRING_NULL"
+        inferior = gdb.selected_inferior()
+        text = inferior.read_memory(data, length).tobytes().decode(errors='replace')
+        return "\"%s\"" % text
+
+class LocalizedText:
+    def __init__(self, val):
+        self.val = val
+
+    def to_string (self):
+        return "UA_LocalizedText(%s, %s)" % (self.val['locale'], self.val['text'])
+
+class QualifiedName:
+    def __init__(self, val):
+        self.val = val
+
+    def to_string (self):
+        return "UA_QualifiedName(%s, %s)" % (int(self.val['namespaceIndex']), self.val['name'])
+
+class Guid:
+    def __init__(self, val):
+        self.val = val
+
+    def to_string (self):
+        return "UA_Guid()"
+
+class NodeId:
+    def __init__(self, val):
+        self.val = val
+
+    def to_string (self):
+        return "UA_NodeId()"
+
+class Variant:
+    def __init__(self, val):
+        self.val = val
+
+    def to_string (self):
+        return "UA_Variant()"
+
+def lookup_type (val):
+    if str(val.type) == 'UA_String':
+        return String(val)
+    if str(val.type) == 'UA_LocalizedText':
+        return LocalizedText(val)
+    if str(val.type) == 'UA_QualifiedName':
+        return QualifiedName(val)
+    if str(val.type) == 'UA_Guid':
+        return Guid(val)
+    if str(val.type) == 'UA_NodeId':
+        return NodeId(val)
+    if str(val.type) == 'UA_Variant':
+        return Variant(val)
+    return None
+
+gdb.pretty_printers.append (lookup_type)