vitest-dev/vitest · error · Error
Unable to set breakpoint, CDP not supported
Error message
Unable to set breakpoint, CDP not supported
What it means
Thrown by BrowserPool.setBreakpoint when config.inspector.waitForDebugger is enabled but the active browser provider has no getCDPSession method. CDP (Chrome DevTools Protocol) is required to inject a breakpoint that pauses the browser tab until the inspector attaches; providers that do not expose CDP cannot honor the waitForDebugger flow.
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 d568f8ce37)
Solutions
- Use a Chromium-based browser (chrome, edge, or the 'chromium' name under playwright) so CDP is available.
- Disable inspector.waitForDebugger if you do not need the auto-pause debugging flow.
- Switch to the playwright provider which exposes getCDPSession for chromium.
- If writing a custom provider, implement getCDPSession(sessionId) returning a CDP-capable session.
Example fix
// before: waitForDebugger with a non-CDP provider/browser
export default defineConfig({
test: {
browser: { provider: 'webdriverio', name: 'firefox', enabled: true },
inspector: { waitForDebugger: true },
},
})
// after: use a CDP-capable chromium browser
export default defineConfig({
test: {
browser: { provider: 'playwright', name: 'chromium', enabled: true },
inspector: { waitForDebugger: true },
},
}) Defensive patterns
Strategy: validation
Validate before calling
// Confirm the provider/browser combo supports CDP before enabling waitForDebugger
function supportsCDP(provider, browser) {
if (provider === 'webdriverio') return browser === 'chrome' || browser === 'edge'
return browser === 'chromium'
}
const { provider, name: browser } = config.browser
if (config.inspector?.waitForDebugger && !supportsCDP(provider, browser)) {
throw new Error(`waitForDebugger requires a CDP-capable browser, got ${provider}/${browser}`)
} Type guard
function canUseWaitForDebugger(config) {
if (!config.inspector?.waitForDebugger) return true
const { provider, name } = config.browser
if (provider === 'webdriverio') return name === 'chrome' || name === 'edge'
return name === 'chromium'
} Prevention
- Only enable inspector.waitForDebugger with Chromium-based browsers.
- Prefer the playwright provider for CDP-based debugging.
- Implement getCDPSession on custom providers if you need waitForDebugger.
When it happens
Trigger: config.inspector.waitForDebugger = true AND a browser provider without getCDPSession (e.g. a non-Chromium provider, or webdriverio with a non-chrome/edge browser — see shouldIgnoreDebugger) reaches setBreakpoint at packages/vitest/src/node/pools/browser.ts:449-450.
Common situations: Enabling inspector.waitForDebugger with the 'webdriverio' provider against firefox/safari; using a custom browser provider that doesn't implement CDP; mixing inspector debugging with a non-Chromium browser.
Related errors
- You've enabled headless mode for "preview" provider but it d
- vitest/browser can be imported only inside the Browser Mode.
- Session "${sessionId}" not found.
- Looks like you set "test.environment" to "browser". To enabl
- All browser instances within a project must use the same pro
AI-assisted analysis of vitest-dev/vitest@d568f8ce37 (2026-08-03).
Data as JSON: /data/errors/396169287dc39f27.json.
Report an issue: GitHub.