Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Server Mode #145

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions bin/rdebug-ide
Original file line number Diff line number Diff line change
Expand Up @@ -139,13 +139,7 @@ end

if options.dispatcher_port != -1
ENV['IDE_PROCESS_DISPATCHER'] = options.dispatcher_port.to_s
if RUBY_VERSION < "1.9"
lib_path = File.expand_path(File.dirname(__FILE__) + "/../lib/")
$: << lib_path unless $:.include? lib_path
require 'ruby-debug-ide/multiprocess'
else
require_relative '../lib/ruby-debug-ide/multiprocess'
end
Debugger.require_multiprocess
Debugger::MultiProcess.do_monkey

ENV['DEBUGGER_STORED_RUBYLIB'] = ENV['RUBYLIB']
Expand Down Expand Up @@ -173,8 +167,11 @@ Debugger.inspect_time_limit = options.inspect_time_limit
Debugger.catchpoint_deleted_event = options.catchpoint_deleted_event || options.rm_protocol_extensions
Debugger.value_as_nested_element = options.value_as_nested_element || options.rm_protocol_extensions
Debugger.key_value_mode = options.key_value_mode
Debugger.skip_wait_for_start = options.skip_wait_for_start

if options.attach_mode
Debugger.require_multiprocess
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do we need to require it here?


if Debugger::FRONT_END == "debase"
Debugger.init_variables
end
Expand Down
11 changes: 11 additions & 0 deletions lib/ruby-debug-ide.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,16 @@
module Debugger

class << self
def require_multiprocess
if RUBY_VERSION < "1.9"
lib_path = File.expand_path(File.dirname(__FILE__) + "/../lib/")
$: << lib_path unless $:.include? lib_path
require 'ruby-debug-ide/multiprocess'
else
require_relative '../lib/ruby-debug-ide/multiprocess'
end
end

def find_free_port(host)
server = TCPServer.open(host, 0)
port = server.addr[1]
Expand Down Expand Up @@ -58,6 +68,7 @@ def cleanup_backtrace(backtrace)
attr_reader :interface
# protocol extensions
attr_accessor :catchpoint_deleted_event, :value_as_nested_element
attr_accessor :skip_wait_for_start


#
Expand Down
22 changes: 12 additions & 10 deletions lib/ruby-debug-ide/commands/control.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ def help_command

def help(cmd)
%{
q[uit]\texit from debugger,
q[uit]\texit from debugger,
exit\talias to quit
}
end
end
end

class RestartCommand < Command # :nodoc:
self.control = true

Expand All @@ -39,7 +39,7 @@ def regexp
$
/x
end

def execute
if not defined? Debugger::RDEBUG_SCRIPT or not defined? Debugger::ARGV
print "We are not in a context we can restart from.\n"
Expand All @@ -64,7 +64,7 @@ def help_command

def help(cmd)
%{
restart|R [args]
restart|R [args]
Restart the program. This is is a re-exec - all debugger state
is lost. If command arguments are passed those are used.
}
Expand All @@ -78,7 +78,7 @@ class StartCommand < Command # :nodoc:
def regexp
/^\s*(start)(\s+ \S+ .*)?$/x
end

def execute
@printer.print_debug("Starting: running program script")
Debugger.run_prog_script #Debugger.prog_script_running?
Expand All @@ -102,23 +102,23 @@ class InterruptCommand < Command # :nodoc:
self.event = false
self.control = true
self.need_context = true

def regexp
/^\s*i(?:nterrupt)?\s*$/
end

def execute
unless Debugger.interrupt_last
context = Debugger.thread_context(Thread.main)
context.interrupt
end
end

class << self
def help_command
'interrupt'
end

def help(cmd)
%{
i[nterrupt]\tinterrupt the program
Expand All @@ -136,11 +136,13 @@ def regexp
end

def execute
Debugger.require_multiprocess
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

isn't it already required by this moment?

interface.command_queue << "finish" if Debugger.skip_wait_for_start
Debugger.stop
Debugger.interface.close
Debugger::MultiProcess.undo_monkey
Debugger.control_thread = nil
Thread.current.exit #@control_thread is a current thread
Thread.current.exit unless Debugger.skip_wait_for_start #@control_thread is a current thread
end

class << self
Expand Down
2 changes: 2 additions & 0 deletions lib/ruby-debug-ide/ide_processor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ def process_commands
end
end
rescue ::Exception
# Workaround to Disconnect in Paused State
return @interface.command_queue << "finish" if $!.message === 'closed stream'
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's better to return after logging the error and backtrace

@printer.print_debug "INTERNAL ERROR!!! #{$!}\n" rescue nil
@printer.print_error "INTERNAL ERROR!!! #{$!}\n" rescue nil
@printer.print_error $!.backtrace.map{|l| "\t#{l}"}.join("\n") rescue nil
Expand Down