| module XoredDebugger | |
| module ThreadEventHandler | |
| def started() | |
| raise NotImplementedError.new('You MUST implement this method in ancessors') | |
| end | |
| def exited(excpt) | |
| raise NotImplementedError.new('You MUST implement this method in ancessors') | |
| end | |
| end | |
| end | |
| class Thread | |
| class << self | |
| alias __internal_ruby_debugger_new :new | |
| @@handler = nil | |
| def new(*args, &block) | |
| thread = __internal_ruby_debugger_new(*args) do | |
| begin | |
| @@handler.started() unless @@handler.nil? | |
| block.call(*args) | |
| ensure | |
| @@handler.exited($!) unless @@handler.nil? | |
| end | |
| end | |
| thread | |
| end | |
| def set_event_handler(handler) | |
| if (handler.nil? || (handler.is_a? XoredDebugger::ThreadEventHandler)) | |
| @@handler = handler | |
| else | |
| throw ArgumentError, 'Handler MUST inherit ThreadEventHandler' | |
| end | |
| end | |
| alias start :new | |
| alias fork :new | |
| end | |
| end |