From 4497e9265b3ff2a7d935db80f91ec297f8708efc Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Mon, 7 Dec 2015 18:19:44 +0000 Subject: Added the monobt LLDB plugin to the repository. --- data/lldb/monobt.py | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 data/lldb/monobt.py (limited to 'data') diff --git a/data/lldb/monobt.py b/data/lldb/monobt.py new file mode 100644 index 00000000000..0e4713816d7 --- /dev/null +++ b/data/lldb/monobt.py @@ -0,0 +1,56 @@ +import lldb + +def print_frames(thread, num_frames, current_thread): + # TODO: Make output header similar to bt. + print '%c thread #%i' % ('*' if current_thread else ' ', thread.idx) + + if current_thread: + selected_frame = thread.GetSelectedFrame() + + for frame in thread.frames[:+num_frames]: + pc = str(frame.addr) + fmt = ' %c %s' + var = frame + if pc[0] == '0': + try: + framestr = frame.EvaluateExpression('(char*)mono_pmip((void*)%s)' % pc).summary[1:-1] + var = 'frame #%i: %s%s' % (frame.idx, pc, framestr) + except: + pass + + print fmt % ('*' if current_thread and frame.idx == selected_frame.idx else ' ', var) + +def monobt(debugger, command, result, dict): + opts = {'all_bt': False, 'num_frames': None} + + if command == 'all': + opts['all_bt'] = True + elif command.isdigit(): + opts['num_frames'] = int(command) + elif command != '': + print 'error: monobt [|all]' + return + + target = debugger.GetSelectedTarget() + process = target.process + + if not process.IsValid(): + print 'error: invalid process' + return + + if opts['all_bt']: + for thread in process.threads: + print_frames(thread, len(thread), process.selected_thread == thread) + print '' + else: + thread = process.selected_thread + num_frames = len(thread) if opts['num_frames'] is None else opts['num_frames'] + print_frames(thread, num_frames, True) + + return None + +def __lldb_init_module (debugger, dict): + # This initializer is being run from LLDB in the embedded command interpreter + # Add any commands contained in this module to LLDB + debugger.HandleCommand('command script add -f monobt.monobt monobt') + print '"monobt" command installed' \ No newline at end of file -- cgit v1.2.3