blob: ebc4793b83178852b2d4203b8807c6dacbac83f7 [file] [log] [blame]
#!/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)