In Files

  • debug-1.4.0/lib/debug/server.rb

DEBUGGER__::UI_TcpServer

Public Class Methods

new(host: nil, port: nil) click to toggle source
 
               # File debug-1.4.0/lib/debug/server.rb, line 330
def initialize host: nil, port: nil
  @addr = nil
  @host = host || CONFIG[:host] || '127.0.0.1'
  @port = port || begin
    port_str = CONFIG[:port] || raise("Specify listening port by RUBY_DEBUG_PORT environment variable.")
    if /\A\d+\z/ !~ port_str
      raise "Specify digits for port number"
    else
      port_str.to_i
    end
  end

  super()
end
            

Public Instance Methods

accept() click to toggle source
 
               # File debug-1.4.0/lib/debug/server.rb, line 358
def accept
  retry_cnt = 0
  super # for fork

  begin
    Socket.tcp_server_sockets @host, @port do |socks|
      @addr = socks[0].local_address.inspect_sockaddr # Change this part if `socks` are multiple.
      rdbg = File.expand_path('../../exe/rdbg', __dir__)

      DEBUGGER__.warn "Debugger can attach via TCP/IP (#{@addr})"
      DEBUGGER__.info <<~EOS
      With rdbg, use the following command line:
      #
      #   #{rdbg} --attach #{@addr.split(':').join(' ')}
      #
      EOS

      chrome_setup if CONFIG[:open_frontend] == 'chrome'

      Socket.accept_loop(socks) do |sock, client|
        @client_addr = client
        yield @sock_for_fork = sock
      end
    end
  rescue Errno::EADDRINUSE
    if retry_cnt < 10
      retry_cnt += 1
      sleep 0.1
      retry
    else
      raise
    end
  rescue Terminate
    # OK
  rescue => e
    $stderr.puts e.inspect, e.message
    pp e.backtrace
    exit
  end
ensure
  @sock_for_fork = nil
end
            
chrome_setup() click to toggle source
 
               # File debug-1.4.0/lib/debug/server.rb, line 345
def chrome_setup
  require_relative 'server_cdp'

  unless @chrome_pid = UI_CDP.setup_chrome(@addr)
    DEBUGGER__.warn <<~EOS if CONFIG[:open_frontend] == 'chrome'
      With Chrome browser, type the following URL in the address-bar:
      
         devtools://devtools/bundled/inspector.html?ws=#{@addr}
      
      EOS
  end
end
            
There is an updated format of the API docs for this version here.