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 27
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 9
def self.first
  Byebug.breakpoints.first
end
last() click to toggle source

Last breakpoint, in order of creation

# File lib/byebug/breakpoint.rb, line 16
def self.last
  Byebug.breakpoints.last
end
none?() click to toggle source

True if there's no breakpoints

# File lib/byebug/breakpoint.rb, line 76
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 69
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 50
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
remove(id) click to toggle source

Removes a breakpoint

@param id [integer] breakpoint number

# File lib/byebug/breakpoint.rb, line 38
def self.remove(id)
  Byebug.breakpoints.reject! { |b| b.id == id }
end

Public Instance Methods

inspect() click to toggle source

Prints all information associated to the breakpoint

# File lib/byebug/breakpoint.rb, line 83
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