vitest-dev/vitest · error

Unable to set breakpoint, CDP not supported

Error message

Unable to set breakpoint, CDP not supported

What it means

Setting a breakpoint requires a CDP session; if the browser provider does not implement getCDPSession, debugger breakpoints are unsupported and Vitest throws before attempting the call. Some browser/provider combos are silently skipped earlier via shouldIgnoreDebugger, but a non-ignored provider without CDP support produces this error.

Solutions

  1. Switch to a Chromium-based browser with a CDP-capable provider (Playwright).
  2. Use a provider that implements getCDPSession.
  3. Disable breakpoints for unsupported browsers, or rely on shouldIgnoreDebugger by using a supported skip combo.

Example fix

// before
export default defineConfig({
  test: { browser: { provider: 'webdriverio', instances: [{ browser: 'firefox' }] } }
})

// after - CDP-capable provider/browser
export default defineConfig({
  test: { browser: { provider: 'playwright', instances: [{ browser: 'chromium' }] } }
})
Defensive patterns

Strategy: type-guard

Validate before calling

function providerSupportsCDP(provider) {
  return typeof provider?.getCDPSession === 'function'
}
// before setting a breakpoint: if (!providerSupportsCDP(provider)) skip breakpoints for that browser

Type guard

function hasCDP(provider): provider is { getCDPSession: (id: string) => Promise<{ send: Function }> } {
  return provider != null && typeof provider.getCDPSession === 'function'
}

Prevention

When it happens

Trigger: A debugger breakpoint being set against a provider that has no getCDPSession method (and is not in the shouldIgnoreDebugger allowlist), e.g. certain Webdriver-only providers or non-Chromium browsers without CDP.

Common situations: Trying to debug in a browser/provider combination that lacks CDP; using a WebDriverIO provider that doesn't implement getCDPSession; non-Chromium browsers.

Related errors


AI-assisted analysis of vitest-dev/vitest@1fa9837ec2 (2026-08-11). Data as JSON: /api/errors/396169287dc39f27. Report an issue: GitHub.

Appendix: source

Thrown at packages/vitest/src/node/pools/browser.ts:450

        })
    }).catch(err => this.reject(err))
  }

  async setBreakpoint(sessionId: string, file: string) {
    if (!this.project.config.inspector.waitForDebugger) {
      return
    }

    const provider = this.project.browser!.provider
    const browser = this.project.config.browser.name

    if (shouldIgnoreDebugger(provider.name, browser)) {
      debug?.('[$s] ignoring debugger in %s browser because it is not supported', sessionId, browser)
      return
    }

    if (!provider.getCDPSession) {
      throw new Error('Unable to set breakpoint, CDP not supported')
    }

    debug?.('[%s] set breakpoint for %s', sessionId, file)
    const session = await provider.getCDPSession(sessionId)
    await session.send('Debugger.enable', {})
    await session.send('Debugger.setBreakpointByUrl', {
      lineNumber: 0,
      urlRegex: escapePathToRegexp(file),
    })
  }
}

function shouldIgnoreDebugger(provider: string, browser: string) {
  if (provider === 'webdriverio') {
    return browser !== 'chrome' && browser !== 'edge'
  }
  return browser !== 'chromium'
}

View on GitHub (pinned to 1fa9837ec2)