Class: DEBUGGER__::UI_TcpServer
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
UI_ServerBase ,
UI_Base
|
|
Instance Chain:
self,
UI_ServerBase ,
UI_Base
|
|
Inherits: |
DEBUGGER__::UI_ServerBase
|
Defined in: | lib/debug/server.rb |
Class Method Summary
Instance Attribute Summary
Instance Method Summary
UI_ServerBase
- Inherited
UI_Base
- Inherited
Constructor Details
.new(host: nil, port: nil) ⇒ UI_TcpServer
# File 'lib/debug/server.rb', line 384
def initialize host: nil, port: nil @local_addr = nil @host = host || CONFIG[:host] @port_save_file = nil @port = begin port_str = (port && port.to_s) || CONFIG[:port] || raise("Specify listening port by RUBY_DEBUG_PORT environment variable.") case port_str when /\A\d+\z/ port_str.to_i when /\A(\d):(.)\z/ @port_save_file = $2 $1.to_i else raise "Specify digits for port number" end end @uuid = nil # for CDP super() end
Instance Method Details
#accept
[ GitHub ]# File 'lib/debug/server.rb', line 419
def accept retry_cnt = 0 super # for fork begin Socket.tcp_server_sockets @host, @port do |socks| @local_addr = socks.first.local_address # Change this part if `socks` are multiple. rdbg = File. ('../../exe/rdbg', __dir__) DEBUGGER__.warn "Debugger can attach via TCP/IP (#{@local_addr.inspect_sockaddr})" if @port_save_file File.write(@port_save_file, "#{socks[0].local_address.ip_port.to_s}\n") DEBUGGER__.warn "Port is saved into #{@port_save_file}" end DEBUGGER__.info <<~EOS With rdbg, use the following command line: # # #{rdbg} --attach #{@local_addr.ip_address} #{@local_addr.ip_port} # EOS case CONFIG[:open] when 'chrome' chrome_setup when 'vscode' vscode_setup @local_addr.inspect_sockaddr end 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. pp e.backtrace exit end ensure @sock_for_fork = nil if @port_save_file && File.exist?(@port_save_file) File.unlink(@port_save_file) end end
#chrome_setup
[ GitHub ]# File 'lib/debug/server.rb', line 405
def chrome_setup require_relative 'server_cdp' @uuid = SecureRandom.uuid unless @chrome_pid = UI_CDP.setup_chrome(@local_addr.inspect_sockaddr, @uuid) DEBUGGER__.warn <<~EOS With Chrome browser, type the following URL in the address-bar: devtools://devtools/bundled/inspector.html?v8only=true&panel=sources&ws=#{@local_addr.inspect_sockaddr}/#{@uuid} EOS end end