utils: gdb: add BigNum pretty printer

This commit is contained in:
Bruno BELANYI 2021-08-20 19:48:05 +02:00
parent d40c109fb7
commit dcf896651d
1 changed files with 30 additions and 0 deletions

View File

@ -0,0 +1,30 @@
import gdb.printing
class BigNumPrinter(object):
"Print a abacus::bignum::BigNum"
def __init__(self, val):
self.val = val
def to_string(self):
digits = self.val['digits_']
begin, end = digits['_M_impl']['_M_start'], digits['_M_impl']['_M_finish']
val = 0
while begin != end:
val *= 10
val += begin.dereference()
begin += 1
val *= self.val['sign_']
return str(val)
def display_hint(self):
return 'string'
def build_pretty_printer():
pp = gdb.printing.RegexpCollectionPrettyPrinter('abacus')
pp.add_printer('BigNum', '^abacus::bignum::BigNum$', BigNumPrinter)
return pp
gdb.printing.register_pretty_printer(gdb.current_objfile(), build_pretty_printer(), True)