Skip to content

[FEATURE] Capture adapter initialize capabilities + best-effort exceptionInfo enrichment on exception stops #243

Description

@debugmcpdev

Follow-up to #220 (breakOnExceptions shipped without runtime capability negotiation).

Gaps

  1. The DAP initialize response is discarded (dap-proxy-connection-manager.ts, initializeSession) — the adapter's real Capabilities (exceptionBreakpointFilters, supportsExceptionInfoRequest, supportsExceptionFilterOptions, ...) are unavailable at runtime. [FEATURE] No way to enable break-on-exception — uncaught exceptions terminate instead of pausing #220's per-language filter tables live on the adapter policies instead; capturing capabilities would let us validate the resolved filters against what the live adapter actually declares (and warn on drift — the static getCapabilities() declarations have already drifted once, see the js-debug correction in [FEATURE] No way to enable break-on-exception — uncaught exceptions terminate instead of pausing #220's PR).

  2. DAP exceptionInfo is never requested. On a stopped with reason: 'exception', a best-effort exceptionInfo call (gated on the captured supportsExceptionInfoRequest, failures swallowed) could enrich lastStop with exceptionId, breakMode, and the full stack description beyond the description/text fields the stopped event carries today. debugpy, js-debug, and netcoredbg all support it.

Sketch

  • Capture the initialize response body in the worker, forward it to the SessionManager in the adapter_configured status (or a dedicated message), store on ManagedSession.
  • On exception stops, worker (or SessionManager via sendDapRequest) issues exceptionInfo(threadId) when supported and merges the result into lastStop.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions