# File rake/lib/debug.rb, line 744 def break_points @break_points end
# File rake/lib/debug.rb, line 794 def context(thread=Thread.current) c = thread[:__debugger_data__] unless c thread[:__debugger_data__] = c = Context.new end c end
# File rake/lib/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
# File rake/lib/debug.rb, line 740 def display @display end
# File rake/lib/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
# File rake/lib/debug.rb, line 802 def interrupt context(@last_thread).stop_next end
# File rake/lib/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
# File rake/lib/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
# File rake/lib/debug.rb, line 762 def set_last_thread(th) @last_thread = th end
# File rake/lib/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
# File rake/lib/debug.rb, line 732 def stdout @stdout end
# File rake/lib/debug.rb, line 736 def stdout=(s) @stdout = s end
# File rake/lib/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
# File rake/lib/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
# File rake/lib/debug.rb, line 831 def thread_list_all for th in @thread_list.values.sort thread_list(th) end end
# File rake/lib/debug.rb, line 748 def waiting @waiting end