*Fix
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_debugger.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_debugger.rb
index a6202b2..123cb54 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_debugger.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_debugger.rb
@@ -21,9 +21,9 @@
@source_manager = SourceManager.new
end
- def terminate
- capture_manager.terminate
- thread_manager.terminate
+ def terminate
+ capture_manager.terminate
+ thread_manager.terminate
end
def create_thread_wrapper(thread)
@@ -47,16 +47,12 @@
false
end
- def handle_main_thread_exception(exception)
- backtrace = exception.backtrace.delete_if { |s| s.index(get_debugger_id) != nil }
- trace = backtrace.shift + ': ' + exception.message + "\n"
- other_traces = backtrace.join("\n\t")
- unless other_traces.empty?
- trace += "\t" + other_traces
- end
- capture_manager.stderr_capturer.write(trace)
- end
-
+ def handle_exception(ex)
+ message = ex.backtrace.delete_if { |s| s.index(get_debugger_id) != nil }
+ message[0] += ': ' + ex.message + ' (' + ex.class.name + ')'
+ $stderr.write( message.join("\n")+"\n" )
+ end
+
# methods to override
def get_debugger_id
raise NotImplementedError.new('You MUST implement this method in ancessors')
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_runner.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_runner.rb
index e615407..4edf73c 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_runner.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_runner.rb
@@ -27,20 +27,32 @@
log('Creating debugger...')
debugger = create_debugger
+ at_exit {
+ log('---->>>>> AT EXIT:')
+ # redirect exception to stderr if available
+ unless $!.nil?
+ log('Exitting with exception:')
+ log("\tMessage: " + $!.message)
+ log("\tBacktrace: " + $!.backtrace.join("\n"))
+ debugger.handle_exception($!)
+ end
+ begin
+ debugger.terminate unless debugger.nil?
+ log('Debugger terminated')
+ shutdownLogger()
+ rescue Exception
+ log('Exception in at_exit:')
+ log("\tMessage: " + $!.message)
+ log("\tBacktrace: " + $!.backtrace.join("\n"))
+ end
+ }
+
log('Starting debugger...')
- debugger.debug(Params.instance.script)
- log('Debug finished')
+ debugger.start
rescue Exception
log('Exception during debugging:')
log("\tMessage: " + $!.message)
log("\tBacktrace: " + $!.backtrace.join("\n"))
- debugger.handle_main_thread_exception($!)
- ensure
- unless debugger.nil?
- log('Terminating debugger...')
- debugger.terminate unless debugger.nil?
- end
- shutdownLogger()
end
end
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/logger.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/logger.rb
index ccdb7bf..d2c77c6 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/logger.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/logger.rb
@@ -17,6 +17,9 @@
def puts(s)
@logger.log(s)
end
+ def close
+ @logger.close
+ end
end
module Logger
@@ -36,6 +39,12 @@
end
end
+ def close
+ @@monitor.synchronize do
+ @@logger.close
+ end
+ end
+
def logger
LoggerAdaptor.new(self)
end
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/capture.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/capture.rb
index 08e5a2c..e4d52bd 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/capture.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/capture.rb
@@ -67,10 +67,11 @@
$stdout = @stdout_capturer
$stderr = @stderr_capturer
- @terminatig = false
+ @terminating = false
@flusher = debugger.create_debug_thread do
begin
- while (@terminatig == false)
+ log('Capture flusher started')
+ while (@terminating == false)
sleep 1
@stdout_capturer.redirected.each_pair do |thread, message|
send(thread, 'stdout', message)
@@ -79,6 +80,7 @@
send(thread, 'stderr', message)
end
end
+ log('Capture flusher terminated')
rescue Exception
log('Exception in capture flusher:')
log("\tMessage: " + $!.message)
@@ -102,7 +104,8 @@
def terminate()
$stdout = STDOUT
$stderr = STDERR
- @terminatig = true
+ @terminating = true
+ @flusher.wakeup()
@flusher.join
end
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/io_socket.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/io_socket.rb
index 4ab440c..d5aae61 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/io_socket.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/io_socket.rb
@@ -43,7 +43,7 @@
end
def receive()
- line = ''
+ line = ''
begin
#IDE: command [SPACE] [args] -- data [NULL]
while((ch = @socket.getc) != 0)
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/stack.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/stack.rb
index c6a2349..e382989 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/stack.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/stack.rb
@@ -12,7 +12,7 @@
# StackManager interface
class AbstractStackManager
# Evaluation
- def eval(text, index = 0)
+ def eval(text, index)
raise NotImplementedError.new('You MUST implement this method in ancessors')
end
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/thread_manager.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/thread_manager.rb
index c608fb7..fffbcb3 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/thread_manager.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/thread_manager.rb
@@ -27,13 +27,14 @@
log('Thread manager cleanup started')
while (@terminated != true)
cleanup
- sleep 1
+ sleep 1
end
rescue Exception
log('Exception in thread manager cleanup:')
log("\tMessage: " + $!.message)
log("\tBacktrace: " + $!.backtrace.join("\n"))
- ensure log('Thread manager cleanup terminated')
+ ensure
+ log('Thread manager cleanup terminated')
end
end
end
@@ -55,8 +56,6 @@
log('Exception')
log("\tMessage: " + $!.message)
log("\tBacktrace: " + $!.backtrace.join("\n"))
- ensure
- log('Done')
end
end