Class: MilkTea::DAP::Server
- Inherits:
-
Object
- Object
- MilkTea::DAP::Server
- Includes:
- ServerBreakpoints, ServerDebugMap, ServerHandlers, ServerLLDBBackend, ServerLaunch, ServerPauseDiagnostics, ServerUtilities, ServerWire
- Defined in:
- lib/milk_tea/dap/server.rb,
lib/milk_tea/dap/server/wire.rb,
lib/milk_tea/dap/server/launch.rb,
lib/milk_tea/dap/server/handlers.rb,
lib/milk_tea/dap/server/debug_map.rb,
lib/milk_tea/dap/server/utilities.rb,
lib/milk_tea/dap/server/breakpoints.rb,
lib/milk_tea/dap/server/lldb_backend.rb,
lib/milk_tea/dap/server/pause_diagnostics.rb
Overview
Minimal DAP server with strict request/response/event envelopes.
Defined Under Namespace
Modules: ServerBreakpoints, ServerDebugMap, ServerHandlers, ServerLLDBBackend, ServerLaunch, ServerPauseDiagnostics, ServerUtilities, ServerWire
Constant Summary collapse
- ADAPTER_CAPABILITIES =
{ supportsConfigurationDoneRequest: true, supportsFunctionBreakpoints: true, supportsConditionalBreakpoints: false, supportsHitConditionalBreakpoints: false, supportsPauseRequest: true, supportsEvaluateForHovers: false, supportsSetVariable: false, supportsTerminateRequest: true, supportTerminateDebuggee: true, supportsLoadedSourcesRequest: true, exceptionBreakpointFilters: [], }.freeze
Constants included from ServerUtilities
ServerUtilities::PERF_LOG_THRESHOLD_MS
Instance Method Summary collapse
-
#initialize(protocol: Protocol.new, session: Session.new, backend_factory: nil, preferred_backend_kind: "process", adapter_command: nil) ⇒ Server
constructor
A new instance of Server.
- #run ⇒ Object
Constructor Details
#initialize(protocol: Protocol.new, session: Session.new, backend_factory: nil, preferred_backend_kind: "process", adapter_command: nil) ⇒ Server
Returns a new instance of Server.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/milk_tea/dap/server.rb', line 37 def initialize(protocol: Protocol.new, session: Session.new, backend_factory: nil, preferred_backend_kind: "process", adapter_command: nil) @protocol = protocol @session = session @backend_factory = backend_factory @preferred_backend_kind = preferred_backend_kind.to_s.empty? ? "process" : preferred_backend_kind.to_s @default_adapter_command = adapter_command&.dup @handlers = {} @write_mutex = Mutex.new @client_request_mutex = Mutex.new @pending_client_responses = {} @incoming_messages = Queue.new @reader_thread = nil @background_threads = [] @background_threads_mutex = Mutex.new @runtime_mutex = Mutex.new @runtime_pid = nil @runtime_paused = false @tmp_dirs = [] @lldb_backend = nil @backend_initialized = false @backend_capabilities = {} @breakpoints_synced_to_backend = false @function_breakpoints_synced_to_backend = false @exception_breakpoints_synced_to_backend = false @backend_start_thread = nil @backend_auto_continue_after_configuration = false @backend_stopped_thread_id = nil @backend_pause_requested = false @last_forwarded_continued_signature = nil @backend_configuration_mutex = Mutex.new @backend_configuration_condition = ConditionVariable.new @backend_configuration_ready = false @debug_map = nil @frame_debug_functions = {} @variables_reference_debug_functions = {} @reverse_request_timeout = Float(ENV.fetch("MILK_TEA_DAP_REVERSE_REQUEST_TIMEOUT", "15")) register_handlers end |
Instance Method Details
#run ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/milk_tea/dap/server.rb', line 76 def run start_client_reader loop do = @incoming_messages.pop break if .nil? next if .equal?(Protocol::INVALID_MESSAGE) () break if @session.should_exit? end ensure @backend_start_thread&.join(0.2) join_background_threads @reader_thread&.join(0.2) end |