#!/usr/bin/env ruby require 'rubygems' require 'optparse' require "ostruct" if RUBY_VERSION < "1.9" require 'ruby-debug-ide' else require_relative '../lib/ruby-debug-ide' end $stdout.sync=true options = OpenStruct.new( 'frame_bind' => false, 'host' => nil, 'load_mode' => false, 'port' => 1234, 'stop' => false, 'tracing' => false, 'int_handler' => true, 'dispatcher_port' => -1, 'evaluation_timeout' => 10, 'rm_protocol_extensions' => false ) opts = OptionParser.new do |opts| opts.banner = <s for debugging ruby-debug itself") do Debugger.xml_debug = true end opts.on("-I", "--include PATH", String, "Add PATH to $LOAD_PATH") do |path| $LOAD_PATH.unshift(path) end opts.on("--keep-frame-binding", "Keep frame bindings") {options.frame_bind = true} opts.on("--disable-int-handler", "Disables interrupt signal handler") {options.int_handler = false} opts.on("--rubymine-protocol-extensions", "Enable RubyMine-specific incompatible protocol extensions") do options.rm_protocol_extensions = true end opts.separator "" opts.separator "Common options:" opts.on_tail("-v", "--version", "Show version") do puts "Using ruby-debug-base #{Debugger::VERSION}" exit end end begin Debugger::ARGV = ARGV.clone rdebug_path = File.expand_path($0) if RUBY_PLATFORM =~ /mswin/ rdebug_path += ".cmd" unless rdebug_path =~ /\.cmd$/i end Debugger::RDEBUG_SCRIPT = rdebug_path opts.parse! ARGV rescue StandardError => e puts opts puts puts e.message exit(1) end if ARGV.empty? puts opts puts puts "Must specify a script to run" exit(1) end # save script name Debugger::PROG_SCRIPT = ARGV.shift if options.dispatcher_port != -1 ENV['IDE_PROCESS_DISPATCHER'] = options.dispatcher_port.to_s if RUBY_VERSION < "1.9" $: << File.expand_path(File.dirname(__FILE__) + "/../lib/") require 'ruby-debug-ide/multiprocess' else require_relative '../lib/ruby-debug-ide/multiprocess' end ENV['DEBUGGER_STORED_RUBYLIB'] = ENV['RUBYLIB'] old_opts = ENV['RUBYOPT'] ENV['RUBYOPT'] = "-r#{File.expand_path(File.dirname(__FILE__))}/../lib/ruby-debug-ide/multiprocess/starter" ENV['RUBYOPT'] += " #{old_opts}" if old_opts ENV['DEBUGGER_CLI_DEBUG'] = Debugger.cli_debug.to_s end if options.int_handler # install interruption handler trap('INT') { Debugger.interrupt_last } end # set options Debugger.keep_frame_binding = options.frame_bind Debugger.tracing = options.tracing Debugger.evaluation_timeout = options.evaluation_timeout Debugger.rm_protocol_extensions = options.rm_protocol_extensions Debugger.debug_program(options)