class Byebug::Breakpoint
Implements breakpoints
Public Class Methods
add(file, line, expr = nil)
click to toggle source
Adds a new breakpoint
@param [String] file @param [Fixnum] line @param [String] expr
# File lib/byebug/breakpoint.rb, line 28 def self.add(file, line, expr = nil) breakpoint = Breakpoint.new(file, line, expr) Byebug.breakpoints << breakpoint breakpoint end
first()
click to toggle source
First breakpoint, in order of creation
# File lib/byebug/breakpoint.rb, line 10 def self.first Byebug.breakpoints.first end
last()
click to toggle source
Last breakpoint, in order of creation
# File lib/byebug/breakpoint.rb, line 17 def self.last Byebug.breakpoints.last end
none?()
click to toggle source
True if there's no breakpoints
# File lib/byebug/breakpoint.rb, line 97 def self.none? Byebug.breakpoints.empty? end
potential_line?(filename, lineno)
click to toggle source
Returns true if a breakpoint could be set in line number
lineno
in file name +filename.
# File lib/byebug/breakpoint.rb, line 90 def self.potential_line?(filename, lineno) potential_lines(filename).member?(lineno) end
potential_lines(filename)
click to toggle source
Returns an array of line numbers in file named filename
where
breakpoints could be set. The list will contain an entry for each distinct
line event call so it is possible (and possibly useful) for a line number
appear more than once.
@param filename [String] File name to inspect for possible breakpoints
# File lib/byebug/breakpoint.rb, line 51 def self.potential_lines(filename) name = "#{Time.new.to_i}_#{rand(2**31)}" iseq = RubyVM::InstructionSequence.compile(File.read(filename), name) if iseq.respond_to?(:each_child) potential_lines_with_trace_points(iseq, {}) else potential_lines_without_trace_points(iseq, {}) end end
remove(id)
click to toggle source
Removes a breakpoint
@param id [integer] breakpoint number
# File lib/byebug/breakpoint.rb, line 39 def self.remove(id) Byebug.breakpoints.reject! { |b| b.id == id } end
Private Class Methods
potential_lines_with_trace_points(iseq, lines)
click to toggle source
# File lib/byebug/breakpoint.rb, line 62 def self.potential_lines_with_trace_points(iseq, lines) iseq.trace_points.each { |(line, _)| lines[line] = true } iseq.each_child do |child| potential_lines_with_trace_points(child, lines) end lines.keys.sort end
potential_lines_without_trace_points(iseq, lines)
click to toggle source
# File lib/byebug/breakpoint.rb, line 73 def self.potential_lines_without_trace_points(iseq, lines) iseq.disasm.each_line do |line| res = /^\d+ (?<insn>\w+)\s+.+\(\s*(?<lineno>\d+)\)$/.match(line) next unless res && res[:insn] == "trace" lines[res[:lineno].to_i] = true end lines.keys end
Public Instance Methods
inspect()
click to toggle source
Prints all information associated to the breakpoint
# File lib/byebug/breakpoint.rb, line 104 def inspect meths = %w[id pos source expr hit_condition hit_count hit_value enabled?] values = meths.map { |field| "#{field}: #{send(field)}" }.join(", ") "#<Byebug::Breakpoint #{values}>" end