Added gdb pretty printers
This commit is contained in:
parent
eb6083daf5
commit
1353d55880
63
scripts/gdb_printers.py
Normal file
63
scripts/gdb_printers.py
Normal file
@ -0,0 +1,63 @@
|
||||
import gdb.printing
|
||||
|
||||
# https://sourceware.org/gdb/onlinedocs/gdb/Pretty-Printing.html
|
||||
# https://sourceware.org/gdb/onlinedocs/gdb/Writing-a-Pretty_002dPrinter.html
|
||||
|
||||
COORDINATE_PRECISION = 1e6
|
||||
|
||||
class CoordinatePrinter:
|
||||
"""Print a CoordinatePrinter object."""
|
||||
def __init__(self, val):
|
||||
self.val = val
|
||||
|
||||
def to_string(self):
|
||||
lon, lat = int(self.val['lon']['__value']), int(self.val['lat']['__value'])
|
||||
return '{{{}, {}}}'.format(float(lon) / COORDINATE_PRECISION, float(lat) / COORDINATE_PRECISION)
|
||||
|
||||
class TurnInstructionPrinter:
|
||||
"""Print a TurnInstruction object."""
|
||||
|
||||
modifiers = {0:'UTurn', 1:'SharpRight', 2:'Right', 3:'SlightRight',
|
||||
4:'Straight', 5:'SlightLeft', 6:'Left', 7:'SharpLeft'}
|
||||
types = {0:'Invalid', 1:'NewName', 2:'Continue', 3:'Turn', 4:'Merge', 5:'OnRamp',
|
||||
6:'OffRamp', 7:'Fork', 8:'EndOfRoad', 9:'Notification', 10:'EnterRoundabout',
|
||||
11:'EnterAndExitRoundabout', 12:'EnterRotary', 13:'EnterAndExitRotary',
|
||||
14:'EnterRoundaboutIntersection', 15:'EnterAndExitRoundaboutIntersection',
|
||||
16:'UseLane', 17:'NoTurn', 18:'Suppressed', 19:'EnterRoundaboutAtExit',
|
||||
20:'ExitRoundabout', 21:'EnterRotaryAtExit', 22:'ExitRotary',
|
||||
23:'EnterRoundaboutIntersectionAtExit', 24:'ExitRoundaboutIntersection',
|
||||
25:'StayOnRoundabout', 26:'Sliproad'}
|
||||
|
||||
def __init__(self, val):
|
||||
self.val = val
|
||||
|
||||
def to_string(self):
|
||||
t, m = int(self.val['type']), int(self.val['direction_modifier'])
|
||||
m = '%s (%d)' % (self.modifiers[m], m) if m in self.modifiers else str(m)
|
||||
t = '%s (%d)' % (self.types[t], t) if t in self.types else str(t)
|
||||
return '{{type = {}, direction_modifier = {}}}'.format(t, m)
|
||||
|
||||
class TurnLaneDataPrinter:
|
||||
"""Print a TurnLaneData object."""
|
||||
|
||||
mask = {0:'Empty', 1:'None', 2:'Straight', 4:'SharpLeft', 8:'Left', 16:'SlightLeft',
|
||||
32:'SlightRight', 64:'Right', 128:'SharpRight', 256:'UTurn', 512:'MergeToLeft',
|
||||
1024:'MergeToRight'}
|
||||
|
||||
def __init__(self, val):
|
||||
self.val = val
|
||||
|
||||
def to_string(self):
|
||||
tg = int(self.val['tag'])
|
||||
fr, to = int(self.val['from']), int(self.val['to'])
|
||||
return '{{tag = {}, from = {}, to = {}}}'.format(self.mask[tg] if tg in self.mask else tg, fr, to)
|
||||
|
||||
def build_pretty_printer():
|
||||
pp = gdb.printing.RegexpCollectionPrettyPrinter('OSRM')
|
||||
pp.add_printer('TurnInstruction', '::TurnInstruction$', TurnInstructionPrinter)
|
||||
pp.add_printer('Coordinate', '::Coordinate$', CoordinatePrinter)
|
||||
pp.add_printer('TurnLaneData', '::TurnLaneData$', TurnLaneDataPrinter)
|
||||
return pp
|
||||
|
||||
#gdb.pretty_printers = [filter(lambda x: x.name != 'OSRM', gdb.pretty_printers)]
|
||||
gdb.printing.register_pretty_printer(gdb.current_objfile(), build_pretty_printer())
|
Loading…
Reference in New Issue
Block a user