| #!/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) |