class Byebug::Breakpoint


Implements breakpoints

def self.add(file, line, expr = nil)

Parameters:
  • expr (String) --
  • line (Fixnum) --
  • file (String) --
def self.add(file, line, expr = nil)
  breakpoint = Breakpoint.new(file, line, expr)
  Byebug.breakpoints << breakpoint
  breakpoint
end

def self.first


First breakpoint, in order of creation
def self.first
  Byebug.breakpoints.first
end

def self.last


Last breakpoint, in order of creation
def self.last
  Byebug.breakpoints.last
end

def self.none?


True if there's no breakpoints
def self.none?
  Byebug.breakpoints.empty?
end

def self.potential_line?(filename, lineno)


name +filename.
Returns true if a breakpoint could be set in line number +lineno+ in file
def self.potential_line?(filename, lineno)
  potential_lines(filename).member?(lineno)
end

def self.potential_lines(filename)

Parameters:
  • filename (String) -- File name to inspect for possible breakpoints
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

def self.potential_lines_with_trace_points(iseq, lines)

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

def self.potential_lines_without_trace_points(iseq, lines)

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

def self.remove(id)

Parameters:
  • id (integer) -- breakpoint number
def self.remove(id)
  Byebug.breakpoints.reject! { |b| b.id == id }
end

def inspect


Prints all information associated to the breakpoint
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