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}
# 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'