MAJ pour upgrade pc backup
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
import gdb
|
||||
import re
|
||||
|
||||
ns_pattern = re.compile(r'nlohmann(::json_abi(?P<tags>\w*)(_v(?P<v_major>\d+)_(?P<v_minor>\d+)_(?P<v_patch>\d+))?)?::(?P<name>.+)')
|
||||
class JsonValuePrinter:
|
||||
"Print a json-value"
|
||||
|
||||
def __init__(self, val):
|
||||
self.val = val
|
||||
|
||||
def to_string(self):
|
||||
if self.val.type.strip_typedefs().code == gdb.TYPE_CODE_FLT:
|
||||
return ("%.6f" % float(self.val)).rstrip("0")
|
||||
return self.val
|
||||
|
||||
def json_lookup_function(val):
|
||||
if m := ns_pattern.fullmatch(str(val.type.strip_typedefs().name)):
|
||||
name = m.group('name')
|
||||
if name and name.startswith('basic_json<') and name.endswith('>'):
|
||||
m_data = val['m_data']
|
||||
m_type = m_data['m_type']
|
||||
m = ns_pattern.fullmatch(str(m_type))
|
||||
t = m.group('name')
|
||||
prefix = 'detail::value_t::'
|
||||
if t and t.startswith(prefix):
|
||||
try:
|
||||
union_val = m_data['m_value'][t.replace(prefix, '', 1)]
|
||||
if union_val.type.code == gdb.TYPE_CODE_PTR:
|
||||
return gdb.default_visualizer(union_val.dereference())
|
||||
else:
|
||||
return JsonValuePrinter(union_val)
|
||||
except Exception:
|
||||
return JsonValuePrinter(m_type)
|
||||
|
||||
gdb.pretty_printers.append(json_lookup_function)
|
||||
Reference in New Issue
Block a user