From 86461fc28cd9c05670ece440d337f255b33e6def Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Mon, 25 Nov 2019 16:52:50 +0900 Subject: lldb_cruby.py: improved dump of Symbol [ci skip] --- misc/lldb_cruby.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'misc/lldb_cruby.py') diff --git a/misc/lldb_cruby.py b/misc/lldb_cruby.py index c34a185217..a582b7dde0 100755 --- a/misc/lldb_cruby.py +++ b/misc/lldb_cruby.py @@ -46,10 +46,10 @@ def string2cstr(rstring): clen = (flags & RSTRING_EMBED_LEN_MASK) >> RSTRING_EMBED_LEN_SHIFT return cptr, clen -def output_string(ctx, rstring): +def output_string(debugger, result, rstring): cptr, clen = string2cstr(rstring) - expr = 'printf("%%.*s", (size_t)%d, (const char*)%d)' % (clen, cptr) - ctx.frame.EvaluateExpression(expr) + expr = "print *(const char (*)[%d])%0#x" % (clen, cptr) + append_command_output(debugger, expr, result) def fixnum_p(x): return x & RUBY_FIXNUM_FLAG != 0 @@ -105,6 +105,7 @@ def lldb_inspect(debugger, target, result, val): print("T_SYMBOL: %c" % num, file=result) else: print("T_SYMBOL: (%x)" % num, file=result) + append_command_output(debugger, "p rb_id2name(%0#x)" % (num >> 8), result) elif num & RUBY_IMMEDIATE_MASK: print('immediate(%x)' % num, file=result) else: @@ -134,7 +135,11 @@ def lldb_inspect(debugger, target, result, val): append_command_output(debugger, "print *(const char (*)[%d])%0#x" % (len, ptr), result) elif flType == RUBY_T_SYMBOL: result.write('T_SYMBOL: %s' % flaginfo) - append_command_output(debugger, "print *(struct RSymbol*)%0#x" % val.GetValueAsUnsigned(), result) + tRSymbol = target.FindFirstType("struct RSymbol").GetPointerType() + val = val.Cast(tRSymbol) + append_command_output(debugger, 'print (ID)%0#x ' % val.GetValueForExpressionPath("->id").GetValueAsUnsigned(), result) + tRString = target.FindFirstType("struct RString").GetPointerType() + output_string(debugger, result, val.GetValueForExpressionPath("->fstr").Cast(tRString)) elif flType == RUBY_T_ARRAY: tRArray = target.FindFirstType("struct RArray").GetPointerType() val = val.Cast(tRArray) @@ -263,7 +268,7 @@ def dump_node(debugger, command, ctx, result, internal_dict): node = args[0] dump = ctx.frame.EvaluateExpression("(struct RString*)rb_parser_dump_tree((NODE*)(%s), 0)" % node) - output_string(ctx, dump) + output_string(ctx, result, dump) def __lldb_init_module(debugger, internal_dict): debugger.HandleCommand("command script add -f lldb_cruby.lldb_rp rp") -- cgit v1.2.3