diff --git a/data/lldb/monobt.py b/data/lldb/monobt.py index 0e4713816d74..8b2a973b8201 100644 --- a/data/lldb/monobt.py +++ b/data/lldb/monobt.py @@ -9,16 +9,38 @@ def print_frames(thread, num_frames, current_thread): for frame in thread.frames[:+num_frames]: pc = str(frame.addr) - fmt = ' %c %s' var = frame - if pc[0] == '0': + function_name = frame.GetFunctionName() + if function_name == "ves_exec_method_with_context": + try: + s = 'frame->runtime_method->method' + klassname = frame.EvaluateExpression('(char*) ' + s + '->klass->name').summary[1:-1] + methodname = frame.EvaluateExpression('(char*) ' + s + '->name').summary[1:-1] + + ipoffset = frame.EvaluateExpression('ip').GetValueAsUnsigned() + insn = '' + if ipoffset != 0: + ipoffset -= frame.EvaluateExpression('rtm->code').GetValueAsUnsigned() + insn = "\"" + frame.EvaluateExpression('mono_interp_opname [*ip]').summary[1:-1] + "\"" + var = '%s::%s @ %d %s || %s' % (klassname, methodname, ipoffset, insn, frame) + except Exception as e: + print "DBG: execfail:" + str(e) + elif function_name == "mono_interp_transform_method": + try: + s = 'runtime_method->method' + klassname = frame.EvaluateExpression('(char*) ' + s + '->klass->name').summary[1:-1] + methodname = frame.EvaluateExpression('(char*) ' + s + '->name').summary[1:-1] + var = 'transforming %s::%s || %s' % (klassname, methodname, frame) + except Exception as e: + print "DBG: transformfail:" + str(e) + elif 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) + print ' %c %s' % ('*' if current_thread and frame.idx == selected_frame.idx else ' ', var) def monobt(debugger, command, result, dict): opts = {'all_bt': False, 'num_frames': None} @@ -53,4 +75,5 @@ 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 + debugger.HandleCommand('command alias mbt monobt') + print '"monobt" command installed'