Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more

In Files

  • debug.rb

Class/Module Index [+]

Quicksearch

DEBUGGER__

Constants

MUTEX

Public Instance Methods

break_points() click to toggle source
 
               # File debug.rb, line 744
def break_points
  @break_points
end
            
context(thread=Thread.current) click to toggle source
 
               # File debug.rb, line 794
def context(thread=Thread.current)
  c = thread[:__debugger_data__]
  unless c
    thread[:__debugger_data__] = c = Context.new
  end
  c
end
            
debug_thread_info(input, binding) click to toggle source
 
               # File debug.rb, line 850
def debug_thread_info(input, binding)
  case input
  when /^l(?:ist)?/
    make_thread_list
    thread_list_all

  when /^c(?:ur(?:rent)?)?$/
    make_thread_list
    thread_list(@thread_list[Thread.current])

  when /^(?:sw(?:itch)?\s+)?(\d+)/
    make_thread_list
    th = get_thread($1.to_i)
    if th == Thread.current
      @stdout.print "It's the current thread.\n"
    else
      thread_list(@thread_list[th])
      context(th).stop_next
      th.run
      return :cont
    end

  when /^stop\s+(\d+)/
    make_thread_list
    th = get_thread($1.to_i)
    if th == Thread.current
      @stdout.print "It's the current thread.\n"
    elsif th.stop?
      @stdout.print "Already stopped.\n"
    else
      thread_list(@thread_list[th])
      context(th).suspend
    end

  when /^resume\s+(\d+)/
    make_thread_list
    th = get_thread($1.to_i)
    if th == Thread.current
      @stdout.print "It's the current thread.\n"
    elsif !th.stop?
      @stdout.print "Already running."
    else
      thread_list(@thread_list[th])
      th.run
    end
  end
end
            
display() click to toggle source
 
               # File debug.rb, line 740
def display
  @display
end
            
get_thread(num) click to toggle source
 
               # File debug.rb, line 806
def get_thread(num)
  th = @thread_list.key(num)
  unless th
    @stdout.print "No thread ##{num}\n"
    throw :debug_error
  end
  th
end
            
interrupt() click to toggle source
 
               # File debug.rb, line 802
def interrupt
  context(@last_thread).stop_next
end
            
make_thread_list() click to toggle source
 
               # File debug.rb, line 837
def make_thread_list
  hash = {}
  for th in Thread::list
    if @thread_list.key? th
      hash[th] = @thread_list[th]
    else
      @max_thread += 1
      hash[th] = @max_thread
    end
  end
  @thread_list = hash
end
            
resume() click to toggle source
 
               # File debug.rb, line 778
def resume
  MUTEX.synchronize do
    make_thread_list
    @thread_list.each do |th,|
      next if th == Thread.current
      context(th).clear_suspend
    end
    waiting.each do |th|
      th.run
    end
    waiting.clear
  end
  # Schedule other threads to restart as soon as possible.
  Thread.pass
end
            
set_last_thread(th) click to toggle source
 
               # File debug.rb, line 762
def set_last_thread(th)
  @last_thread = th
end
            
set_trace( arg ) click to toggle source
 
               # File debug.rb, line 752
def set_trace( arg )
  MUTEX.synchronize do
    make_thread_list
    for th, in @thread_list
      context(th).set_trace arg
    end
  end
  arg
end
            
stdout() click to toggle source
 
               # File debug.rb, line 732
def stdout
  @stdout
end
            
stdout=(s) click to toggle source
 
               # File debug.rb, line 736
def stdout=(s)
  @stdout = s
end
            
suspend() click to toggle source
 
               # File debug.rb, line 766
def suspend
  MUTEX.synchronize do
    make_thread_list
    for th, in @thread_list
      next if th == Thread.current
      context(th).set_suspend
    end
  end
  # Schedule other threads to suspend as soon as possible.
  Thread.pass
end
            
thread_list(num) click to toggle source
 
               # File debug.rb, line 815
def thread_list(num)
  th = get_thread(num)
  if th == Thread.current
    @stdout.print "+"
  else
    @stdout.print " "
  end
  @stdout.printf "%d ", num
  @stdout.print th.inspect, "\t"
  file = context(th).instance_eval{@file}
  if file
    @stdout.print file,":",context(th).instance_eval{@line}
  end
  @stdout.print "\n"
end
            
thread_list_all() click to toggle source
 
               # File debug.rb, line 831
def thread_list_all
  for th in @thread_list.values.sort
    thread_list(th)
  end
end
            
waiting() click to toggle source
 
               # File debug.rb, line 748
def waiting
  @waiting
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus