class Byebug::Frame
Represents a frame in the stack trace
Attributes
pos[R]
Public Class Methods
new(context, pos)
click to toggle source
# File lib/byebug/frame.rb, line 13 def initialize(context, pos) @context = context @pos = pos end
Public Instance Methods
_binding()
click to toggle source
# File lib/byebug/frame.rb, line 30 def _binding @context.frame_binding(pos) end
_class()
click to toggle source
# File lib/byebug/frame.rb, line 34 def _class @context.frame_class(pos) end
_method()
click to toggle source
# File lib/byebug/frame.rb, line 38 def _method @context.frame_method(pos) end
_self()
click to toggle source
# File lib/byebug/frame.rb, line 26 def _self @context.frame_self(pos) end
args()
click to toggle source
Gets current method arguments for the frame.
# File lib/byebug/frame.rb, line 61 def args return c_args unless _binding ruby_args end
c_frame?()
click to toggle source
Checks whether the frame is a c-frame
# File lib/byebug/frame.rb, line 140 def c_frame? _binding.nil? end
current?()
click to toggle source
# File lib/byebug/frame.rb, line 42 def current? @context.frame.pos == pos end
deco_args()
click to toggle source
Builds a string containing all available args in the frame number, in a
verbose or non verbose way according to the value of the
callstyle
setting
# File lib/byebug/frame.rb, line 88 def deco_args return "" if args.empty? my_args = args.map do |arg| prefix, default = prefix_and_default(arg[0]) kls = use_short_style?(arg) ? "" : "##{locals[arg[1]].class}" "#{prefix}#{arg[1] || default}#{kls}" end "(#{my_args.join(', ')})" end
deco_block()
click to toggle source
# File lib/byebug/frame.rb, line 75 def deco_block _method[/(?:block(?: \(\d+ levels\))?|rescue) in /] || "" end
deco_call()
click to toggle source
Builds a formatted string containing information about current method call
# File lib/byebug/frame.rb, line 105 def deco_call deco_block + deco_class + deco_method + deco_args end
deco_class()
click to toggle source
Returns the current class in the frame or an empty string if the current
callstyle
setting is 'short'
# File lib/byebug/frame.rb, line 71 def deco_class Setting[:callstyle] == "short" || _class.to_s.empty? ? "" : "#{_class}." end
deco_file()
click to toggle source
Formatted filename in frame
# File lib/byebug/frame.rb, line 112 def deco_file Setting[:fullpath] ? File.expand_path(file) : shortpath(file) end
deco_method()
click to toggle source
# File lib/byebug/frame.rb, line 79 def deco_method _method[/((?:block(?: \(\d+ levels\))?|rescue) in )?(.*)/] end
deco_pos()
click to toggle source
Properly formatted frame number of frame
# File lib/byebug/frame.rb, line 119 def deco_pos format("%-2<pos>d", pos: pos) end
file()
click to toggle source
# File lib/byebug/frame.rb, line 18 def file @context.frame_file(pos) end
line()
click to toggle source
# File lib/byebug/frame.rb, line 22 def line @context.frame_line(pos) end
locals()
click to toggle source
Gets local variables for the frame.
# File lib/byebug/frame.rb, line 49 def locals return [] unless _binding _binding.local_variables.each_with_object({}) do |e, a| a[e] = _binding.local_variable_get(e) a end end
mark()
click to toggle source
Formatted mark for the frame.
–> marks the current frame ͱ– marks c-frames
marks regular frames
# File lib/byebug/frame.rb, line 130 def mark return "-->" if current? return " ͱ--" if c_frame? " " end
to_hash()
click to toggle source
# File lib/byebug/frame.rb, line 144 def to_hash { mark: mark, pos: deco_pos, call: deco_call, file: deco_file, line: line, full_path: File.expand_path(deco_file) } end
Private Instance Methods
c_args()
click to toggle source
# File lib/byebug/frame.rb, line 157 def c_args return [] unless _self.to_s != "main" _class.instance_method(_method).parameters end
prefix_and_default(arg_type)
click to toggle source
# File lib/byebug/frame.rb, line 177 def prefix_and_default(arg_type) return ["&", "block"] if arg_type == :block return ["*", "args"] if arg_type == :rest ["", nil] end
ruby_args()
click to toggle source
# File lib/byebug/frame.rb, line 163 def ruby_args meth_name = _binding.eval("__method__") return [] unless meth_name meth_obj = _class.instance_method(meth_name) return [] unless meth_obj meth_obj.parameters end
use_short_style?(arg)
click to toggle source
# File lib/byebug/frame.rb, line 173 def use_short_style?(arg) Setting[:callstyle] == "short" || arg[1].nil? || locals.empty? end