class GDBRubyConfig

Attributes

core_or_pid[R]
exe[R]
is_pid[R]

Public Class Methods

new(argvs) click to toggle source
# File bin/gdbruby.rb, line 45
def initialize(argvs)
  @config_map = {}
  @argv = []

  argvs.each do |argv|
    if argv =~ /^(\w+)=(.+)$/
      @config_map[$1] = $2
    else
      @argv << argv
    end
  end

  parse_argv
end

Public Instance Methods

[](key, default_value = nil) click to toggle source
# File bin/gdbruby.rb, line 95
def [](key, default_value = nil)
  if @config_map.has_key?(key)
    return case default_value
    when TrueClass, FalseClass
      not (@config_map[key].empty? || @config_map[key] == '0')
    when Numeric
      @config_map[key].to_i
    else
      @config_map[key]
    end
  end
  default_value
end
parse_argv() click to toggle source
# File bin/gdbruby.rb, line 60
def parse_argv
  @core_or_pid = @argv[0]

  unless @core_or_pid
    message =
      "Usage: #{$0} PROCESS_ID [ruby_EXECUTABLE] [OPTION=VALUE [...]]\n" +
      "Usage: #{$0} CORE_FILE ruby_EXECUTABLE [OPTION=VALUE [...]]\n"
    puts message
    exit 1
  end

  exe = @argv[1]

  @is_pid = (@core_or_pid =~ /^\d+$/)
  if @is_pid
    if exe.nil?
      begin
        if RUBY_PLATFORM =~ /linux/
          exe = File.readlink("/proc/#{@core_or_pid}/exe")
        end
      rescue
      end
    end

    if exe.nil?
      exe = `rbenv which ruby`
      exe = `which ruby` unless FileTest.exist?(exe)
      exe.chomp!
    end
  end

  raise "failed to detect ruby executable" unless exe
  @exe = exe
end