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)}"
  lines = {}
  iseq = RubyVM::InstructionSequence.compile(File.read(filename), name)
  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 do |field|
    "#{field}: #{send(field)}"
  end.join(', ')
  "#<Byebug::Breakpoint #{values}>"
end