From 3f69e897aa68a07639e01f406eed4572c62eae43 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Mon, 11 Feb 2013 19:09:55 +0100 Subject: digital/ucoolib/ucoolib/utils: add trace buffer --- digital/ucoolib/ucoolib/utils/dtrace.py | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 digital/ucoolib/ucoolib/utils/dtrace.py (limited to 'digital/ucoolib/ucoolib/utils/dtrace.py') diff --git a/digital/ucoolib/ucoolib/utils/dtrace.py b/digital/ucoolib/ucoolib/utils/dtrace.py new file mode 100644 index 00000000..f836a363 --- /dev/null +++ b/digital/ucoolib/ucoolib/utils/dtrace.py @@ -0,0 +1,37 @@ +"""GDB plugin to dump trace from a Trace object.""" + +class DTrace(gdb.Command): + def __init__(self): + gdb.Command.__init__(self, "dtrace", gdb.COMMAND_DATA, gdb.COMPLETE_SYMBOL, True) + + def invoke(self, arg, from_tty): + args = gdb.string_to_argv(arg) + if len(args) != 1: + print 'Usage: dtrace ' + return + + trace = gdb.parse_and_eval(args[0]) + args_nb = trace['args_nb']; + entries_nb = trace['entries_nb']; + index = trace['index']; + entries = trace['entries']; + + if entries[index]['str']: + r = range(index, entries_nb) + range(index) + else: + r = range(index) + + for i in r: + entry = entries[i] + if not entry['str']: + break + s = entry['str'].string() + sargs = s.count('%') - 2 * s.count('%%') + args = tuple(entry['args'][i] for i in xrange(sargs)) + try: + s = s % args + except: + pass + print s + +DTrace() -- cgit v1.2.3