From 2ec1080ac9bafeb193ab72c3504afa17831de6d3 Mon Sep 17 00:00:00 2001 From: Teon Banek <teon.banek@memgraph.io> Date: Sun, 30 Jul 2017 20:23:09 +0200 Subject: [PATCH] Add pretty printer to gdb for TypedValue Reviewers: florijan, mislav.bradac, buda Reviewed By: mislav.bradac Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D619 --- .gdbinit | 1 + tools/gdb-plugins/pretty_printers.py | 45 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 tools/gdb-plugins/pretty_printers.py diff --git a/.gdbinit b/.gdbinit index ecdae1764..fd30dcdc6 100644 --- a/.gdbinit +++ b/.gdbinit @@ -1 +1,2 @@ source ./tools/gdb-plugins/operator_tree.py +source ./tools/gdb-plugins/pretty_printers.py diff --git a/tools/gdb-plugins/pretty_printers.py b/tools/gdb-plugins/pretty_printers.py new file mode 100644 index 000000000..7545af029 --- /dev/null +++ b/tools/gdb-plugins/pretty_printers.py @@ -0,0 +1,45 @@ +import gdb +import gdb.printing + + +def build_memgraph_pretty_printers(): + '''Instantiate and return all memgraph pretty printer classes.''' + pp = gdb.printing.RegexpCollectionPrettyPrinter('memgraph') + pp.add_printer('query::TypedValue', '^query::TypedValue$', TypedValuePrinter) + return pp + + +class TypedValuePrinter(gdb.printing.PrettyPrinter): + '''Pretty printer for query::TypedValue''' + def __init__(self, val): + super(TypedValuePrinter, self).__init__('TypedValue') + self.val = val + + def to_string(self): + def _to_str(val): + return '{%s %s}' % (value_type, self.val[val]) + value_type = str(self.val['type_']) + if value_type == 'query::TypedValue::Type::Null': + return '{%s}' % value_type + elif value_type == 'query::TypedValue::Type::Bool': + return _to_str('bool_v') + elif value_type == 'query::TypedValue::Type::Int': + return _to_str('int_v') + elif value_type == 'query::TypedValue::Type::Double': + return _to_str('double_v') + elif value_type == 'query::TypedValue::Type::String': + return _to_str('string_v') + elif value_type == 'query::TypedValue::Type::List': + return _to_str('list_v') + elif value_type == 'query::TypedValue::Type::Map': + return _to_str('map_v') + elif value_type == 'query::TypedValue::Type::Vertex': + return _to_str('vertex_v') + elif value_type == 'query::TypedValue::Type::Edge': + return _to_str('edge_v') + elif value_type == 'query::TypedValue::Type::Path': + return _to_str('path_v') + return '{%s}' % value_type + +gdb.printing.register_pretty_printer(None, build_memgraph_pretty_printers(), + replace=True)