{"record":{"id":"396169287dc39f27","repo":"vitest-dev/vitest","slug":"unable-to-set-breakpoint-cdp-not-supported","errorCode":null,"errorMessage":"Unable to set breakpoint, CDP not supported","messagePattern":"Unable to set breakpoint, CDP not supported","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/vitest/src/node/pools/browser.ts","lineNumber":450,"sourceCode":"        })\n    }).catch(err => this.reject(err))\n  }\n\n  async setBreakpoint(sessionId: string, file: string) {\n    if (!this.project.config.inspector.waitForDebugger) {\n      return\n    }\n\n    const provider = this.project.browser!.provider\n    const browser = this.project.config.browser.name\n\n    if (shouldIgnoreDebugger(provider.name, browser)) {\n      debug?.('[$s] ignoring debugger in %s browser because it is not supported', sessionId, browser)\n      return\n    }\n\n    if (!provider.getCDPSession) {\n      throw new Error('Unable to set breakpoint, CDP not supported')\n    }\n\n    debug?.('[%s] set breakpoint for %s', sessionId, file)\n    const session = await provider.getCDPSession(sessionId)\n    await session.send('Debugger.enable', {})\n    await session.send('Debugger.setBreakpointByUrl', {\n      lineNumber: 0,\n      urlRegex: escapePathToRegexp(file),\n    })\n  }\n}\n\nfunction shouldIgnoreDebugger(provider: string, browser: string) {\n  if (provider === 'webdriverio') {\n    return browser !== 'chrome' && browser !== 'edge'\n  }\n  return browser !== 'chromium'\n}","sourceCodeStart":432,"sourceCodeEnd":468,"githubUrl":"https://github.com/vitest-dev/vitest/blob/1fa9837ec26533512fdcad8baebf249771bd340a/packages/vitest/src/node/pools/browser.ts#L432-L468","documentation":"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.","triggerScenarios":"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.","commonSituations":"Trying to debug in a browser/provider combination that lacks CDP; using a WebDriverIO provider that doesn't implement getCDPSession; non-Chromium browsers.","solutions":["Switch to a Chromium-based browser with a CDP-capable provider (Playwright).","Use a provider that implements getCDPSession.","Disable breakpoints for unsupported browsers, or rely on shouldIgnoreDebugger by using a supported skip combo."],"exampleFix":"// before\nexport default defineConfig({\n  test: { browser: { provider: 'webdriverio', instances: [{ browser: 'firefox' }] } }\n})\n\n// after - CDP-capable provider/browser\nexport default defineConfig({\n  test: { browser: { provider: 'playwright', instances: [{ browser: 'chromium' }] } }\n})","handlingStrategy":"type-guard","validationCode":"function providerSupportsCDP(provider) {\n  return typeof provider?.getCDPSession === 'function'\n}\n// before setting a breakpoint: if (!providerSupportsCDP(provider)) skip breakpoints for that browser","typeGuard":"function hasCDP(provider): provider is { getCDPSession: (id: string) => Promise<{ send: Function }> } {\n  return provider != null && typeof provider.getCDPSession === 'function'\n}","tryCatchPattern":null,"preventionTips":["Use a Chromium-based browser with a CDP-capable provider (Playwright) for debugging.","Gate debugger features on hasCDP(provider) before invoking breakpoints.","Add unsupported browser/provider combos to shouldIgnoreDebugger to skip silently."],"tags":["browser","debugger","cdp"],"backgroundTag":null,"analyzedSha":"1fa9837ec26533512fdcad8baebf249771bd340a","analyzedAt":"2026-08-11T16:11:39.638Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}