12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #!/usr/bin/env python
- # 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)
|