Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/lldb/monobt.py31
1 files changed, 27 insertions, 4 deletions
diff --git a/data/lldb/monobt.py b/data/lldb/monobt.py
index 0e4713816d7..8b2a973b820 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'