ruby-changes:65991
From: Matt <ko1@a...>
Date: Tue, 27 Apr 2021 23:59:11 +0900 (JST)
Subject: [ruby-changes:65991] f64bb9fc84 (master): lldb: dump_page_rvalue - dump a heap page containing an RVALUE
https://git.ruby-lang.org/ruby.git/commit/?id=f64bb9fc84 From f64bb9fc848814c3ad1f559fc3e1e0043a905b72 Mon Sep 17 00:00:00 2001 From: Matt Valentine-House <matt@e...> Date: Tue, 27 Apr 2021 12:17:55 +0100 Subject: lldb: dump_page_rvalue - dump a heap page containing an RVALUE rather than having to do this in a two step process: 1. heap_page obj 2. dump_page $2 (or whatever lldb variable heap_page set) we can now just dump_page_rvalue obj --- misc/lldb_cruby.py | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/misc/lldb_cruby.py b/misc/lldb_cruby.py index 748d8aa..2b5359d 100755 --- a/misc/lldb_cruby.py +++ b/misc/lldb_cruby.py @@ -552,19 +552,10 @@ class HeapPageIter: https://github.com/ruby/ruby/blob/trunk/misc/lldb_cruby.py#L552 raise StopIteration -def dump_page(debugger, command, result, internal_dict): +def dump_page_internal(page, target, process, thread, frame, result, debugger): if not ('RUBY_Qfalse' in globals()): lldb_init(debugger) - target = debugger.GetSelectedTarget() - process = target.GetProcess() - thread = process.GetSelectedThread() - frame = thread.GetSelectedFrame() - - tHeapPageP = target.FindFirstType("struct heap_page").GetPointerType() - page = frame.EvaluateExpression(command) - page = page.Cast(tHeapPageP) - ruby_type_map = ruby_types(debugger) freelist = [] @@ -593,6 +584,34 @@ def dump_page(debugger, command, result, internal_dict): https://github.com/ruby/ruby/blob/trunk/misc/lldb_cruby.py#L584 print(result_str, file=result) +def dump_page(debugger, command, result, internal_dict): + target = debugger.GetSelectedTarget() + process = target.GetProcess() + thread = process.GetSelectedThread() + frame = thread.GetSelectedFrame() + + tHeapPageP = target.FindFirstType("struct heap_page").GetPointerType() + page = frame.EvaluateExpression(command) + page = page.Cast(tHeapPageP) + + dump_page_internal(page, target, process, thread, frame, result, debugger) + + +def dump_page_rvalue(debugger, command, result, internal_dict): + target = debugger.GetSelectedTarget() + process = target.GetProcess() + thread = process.GetSelectedThread() + frame = thread.GetSelectedFrame() + + val = frame.EvaluateExpression(command) + page = get_page(lldb, target, val) + page_type = target.FindFirstType("struct heap_page").GetPointerType() + page.Cast(page_type) + + dump_page_internal(page, target, process, thread, frame, result, debugger) + + + def rb_type(flags, ruby_types): flType = flags & RUBY_T_MASK return "%-10s" % (ruby_types.get(flType, ("%0#x" % flType))) @@ -623,6 +642,7 @@ def __lldb_init_module(debugger, internal_dict): https://github.com/ruby/ruby/blob/trunk/misc/lldb_cruby.py#L642 debugger.HandleCommand("command script add -f lldb_cruby.heap_page_body heap_page_body") debugger.HandleCommand("command script add -f lldb_cruby.rb_backtrace rbbt") debugger.HandleCommand("command script add -f lldb_cruby.dump_page dump_page") + debugger.HandleCommand("command script add -f lldb_cruby.dump_page_rvalue dump_page_rvalue") lldb_init(debugger) print("lldb scripts for ruby has been installed.") -- cgit v1.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/