summaryrefslogtreecommitdiff
path: root/digital/ucoolib/ucoolib/utils/dtrace.py
diff options
context:
space:
mode:
Diffstat (limited to 'digital/ucoolib/ucoolib/utils/dtrace.py')
-rw-r--r--digital/ucoolib/ucoolib/utils/dtrace.py37
1 files changed, 37 insertions, 0 deletions
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 <object>'
+ 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()