123456789_123456789_123456789_123456789_123456789_

Class: DEBUGGER__::Breakpoint

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
Inherits: Object
Defined in: lib/debug/breakpoint.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(cond, command, path, do_enable: true) ⇒ Breakpoint

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 11

def initialize cond, command, path, do_enable: true
  @deleted = false

  @cond = cond
  @command = command
  @path = path

  setup
  enable if do_enable
end

Instance Attribute Details

#deleted?Boolean (readonly)

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 57

def deleted?
  @deleted
end

#duplicable?Boolean (readonly)

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 84

def duplicable?
  false
end

#enabled?Boolean (readonly)

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 48

def enabled?
  @tp.enabled?
end

#key (readonly)

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 9

attr_reader :key, :skip_src

#oneshot?Boolean (readonly)

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 32

def oneshot?
  defined?(@oneshot) && @oneshot
end

#skip_src (readonly)

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 9

attr_reader :key, :skip_src

Instance Method Details

#delete

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 52

def delete
  disable
  @deleted = true
end

#description

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 80

def description
  to_s
end

#disable

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 44

def disable
  @tp&.disable
end

#enable

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 40

def enable
  @tp.enable
end

#generate_label(name)

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 101

def generate_label(name)
  colorize(" BP - #{name} ", [:YELLOW, :BOLD, :REVERSE])
end

#safe_eval(b, expr)

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 22

def safe_eval b, expr
  b.eval(expr)
rescue Exception => e
  puts "[EVAL ERROR]"
  puts "  expr: #{expr}"
  puts "  err: #{e} (#{e.class})"
  puts "Error caused by #{self}."
  nil
end

#setup

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 36

def setup
  raise "not implemented..."
end

#skip_path?(path) ⇒ Boolean

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 88

def skip_path?(path)
  case @path
  when Regexp
    !path.match?(@path)
  when String
    !path.include?(@path)
  else
    super
  end
end

#suspend

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 61

def suspend
  if @command
    provider, pre_cmds, do_cmds = @command
    nonstop = true if do_cmds
    cmds = [*pre_cmds&.split(';;'), *do_cmds&.split(';;')]
    SESSION.add_preset_commands provider, cmds, kick: false, continue: nonstop
  end

  ThreadClient.current.on_breakpoint @tp, self
end

#to_s

[ GitHub ]

  
# File 'lib/debug/breakpoint.rb', line 72

def to_s
  s = ''.dup
  s << " if: #{@cond}"        if defined?(@cond) && @cond
  s << " pre: #{@command[1]}" if defined?(@command) && @command && @command[1]
  s << " do: #{@command[2]}"  if defined?(@command) && @command && @command[2]
  s
end