class DEBUGGER__::FrameInfo
Constants
- BLOCK_LABL_REGEXP
- HOME
Public Class Methods
pretty_path(path)
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 30 def self.pretty_path path return '#<none>' unless path use_short_path = CONFIG[:use_short_path] case when use_short_path && path.start_with?(dir = RbConfig::CONFIG["rubylibdir"] + '/') path.sub(dir, '$(rubylibdir)/') when use_short_path && Gem.path.any? do |gp| path.start_with?(dir = gp + '/gems/') end path.sub(dir, '$(Gem)/') when HOME && path.start_with?(HOME) path.sub(HOME, '~/') else path end end
Public Instance Methods
block_identifier()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 87 def block_identifier return unless frame_type == :block _, level, block_loc = location.label.match(BLOCK_LABL_REGEXP).to_a [level || "", block_loc] end
c_identifier()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 98 def c_identifier return unless frame_type == :c "[C] #{klass_sig}#{location.base_label}" end
callee()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 108 def callee self._callee ||= begin self.binding&.eval('__callee__') rescue NameError # BasicObject nil end end
eval_binding()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 131 def eval_binding if b = self.dupped_binding b else b = self.binding || TOPLEVEL_BINDING self.dupped_binding = b.dup end end
file_lines()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 67 def file_lines SESSION.source(self.iseq) end
frame_type()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 71 def frame_type if self.local_variables && iseq if iseq.type == :block :block elsif callee :method else :other end else :c end end
iseq_parameters_info()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 150 def iseq_parameters_info case frame_type when :block, :method parameters_info else nil end end
local_variables()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 140 def local_variables if lvars = self._local_variables lvars elsif b = self.binding b.local_variables.map{|var| [var, b.local_variable_get(var)] }.to_h end end
location_str()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 127 def location_str "#{pretty_path}:#{location.lineno}" end
matchable_location()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 122 def matchable_location # realpath can sometimes be nil so we can't use it here "#{path}:#{location.lineno}" end
method_identifier()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 93 def method_identifier return unless frame_type == :method "#{klass_sig}#{callee}" end
name()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 52 def name # p frame_type: frame_type, self: self case frame_type when :block level, block_loc = block_identifier "block in #{block_loc}#{level}" when :method method_identifier when :c c_identifier when :other other_identifier end end
other_identifier()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 103 def other_identifier return unless frame_type == :other location.label end
parameters_info()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 159 def parameters_info vars = iseq.parameters_symbols vars.map{|var| begin { name: var, value: DEBUGGER__.safe_inspect(local_variable_get(var), short: true) } rescue NameError, TypeError nil end }.compact end
path()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 22 def path location.path end
pretty_path()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 48 def pretty_path FrameInfo.pretty_path path end
realpath()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 26 def realpath location.absolute_path end
return_str()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 116 def return_str if self.binding && iseq && has_return_value DEBUGGER__.safe_inspect(return_value, short: true) end end
Private Instance Methods
get_singleton_class(obj)
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 170 def get_singleton_class obj obj.singleton_class # TODO: don't use it rescue TypeError nil end
klass_sig()
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 180 def klass_sig if self.class == get_singleton_class(self.self) "#{self.self}." else "#{self.class}#" end end
local_variable_get(var)
click to toggle source
# File debug-1.8.0/lib/debug/frame_info.rb, line 176 def local_variable_get var local_variables[var] end