You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code中TypeScript客户端调试遇Unbound breakpoint问题求助

TypeScript客户端调试出现“unbound breakpoint”问题排查

问题描述

调试某开源代码时,服务端可正常调试,但TypeScript编写的客户端无法命中断点——调试会话已启动,客户端能被调用,但设置断点时显示“unbound breakpoint”提示。未使用launch.json进行调试,运行日志如下:

suroi-master/client
$ pnpm run dev
Debugger attached.
 WARN  Unsupported engine: wanted:{"node":">=18.8.0"} (current:{"node":"v18.4.0","pnpm":"8.6.12"})

> @suroi/client@ dev C:\dev\my\js\io\suroi-master\client
> webpack serve --config ./webpack/webpack.dev.ts

Debugger attached.
<i> [webpack-dev-server] Project is running at:
<i> [webpack-dev-server] Loopback: http://localhost:3000/
<i> [webpack-dev-server] On Your Network (IPv4): http://10.100.102.13:3000/
<i> [webpack-dev-server] Content not from webpack is served from 'C:\dev\my\js\io\suroi-master\client\public' directory
<i> [webpack-dev-server] 404s will fallback to '/index.html'
92% sealing asset processing webpack-spritesheet-plugin
(process:8180): Pango-WARNING **: 14:29:22.526: couldn't load font "Inter Bold Not-Rotated 21.15625", falling back to "Sans Bold Not-Rotated 21.15625", expect ugly output.

(process:8180): Pango-WARNING **: 14:29:22.566: couldn't load font "Sans Serif Not-Rotated 12.19921875", falling back to "Sans Not-Rotated 12.19921875", expect ugly output.
assets by info 9.51 MiB [immutable]
  assets by chunk 986 KiB (auxiliary name: app) 15 assets
  assets by path js/*.js 8.37 MiB 7 assets
  assets by path css/*.css 181 KiB 4 assets
assets by path img/atlases/ 3.62 MiB
  assets by status 3.56 MiB [big] 2 assets
  assets by path img/atlases/*.json 63.1 KiB 2 assets
assets by path ./ 11.7 KiB
  asset ./changelog/index.html 5.73 KiB [emitted]
  asset ./rules/index.html 2.38 KiB [emitted]
  asset ./news/index.html 2.33 KiB [emitted]
  asset ./leaderboard/index.html 1.25 KiB [emitted]
asset index.html 16.8 KiB [emitted]
Entrypoint app [big] 8.38 MiB (11.2 MiB) = js/manifest.9d1e2c3a.js 48.3 KiB js/vendor.1affff20.js 7.95 MiB css/app.00dca8df.css 47.4 KiB js/app.2bdad6f3.js 345 KiB 19 auxiliary assets
Entrypoint changelog [big] 8 MiB (9.66 MiB) = js/manifest.9d1e2c3a.js 48.3 KiB js/vendor.1affff20.js 7.95 MiB css/changelog.8eeed98b.css 1.15 KiB js/changelog.7934ec08.js 2.03 KiB 4 auxiliary assets
Entrypoint leaderboard [big] 8 MiB (9.66 MiB) = js/manifest.9d1e2c3a.js 48.3 KiB js/vendor.1affff20.js 7.95 MiB js/leaderboard.9a620d14.js 999 bytes 2 auxiliary assets
Entrypoint news [big] 8.08 MiB (10.7 MiB) = js/manifest.9d1e2c3a.js 48.3 KiB js/vendor.1affff20.js 7.95 MiB css/news.65c509c0.css 66.2 KiB js/news.2b6eeb13.js 19.4 KiB 19 auxiliary assets
Entrypoint rules [big] 8.07 MiB (10.7 MiB) = js/manifest.9d1e2c3a.js 48.3 KiB js/vendor.1affff20.js 7.95 MiB css/rules.65c509c0.css 66.2 KiB js/rules.0c990a45.js 8.97 KiB 19 auxiliary assets
runtime modules 72.2 KiB 41 modules
orphan modules 178 KiB (javascript) 986 KiB (asset) [orphan] 22 modules
javascript modules 8.12 MiB
  modules by path ../ 7.92 MiB
    modules by path ../node_modules/.pnpm/ 7.81 MiB 85 modules
    modules by path ../common/src/ 117 KiB 25 modules
  modules by path ./src/ 204 KiB
    modules by path ./src/scripts/ 200 KiB 40 modules
    modules by path ./src/*.ts 3.36 KiB 5 modules
    modules by path ./src/scss/pages/*.scss 1.16 KiB 3 modules
css modules 66.8 KiB
  css ../node_modules/.pnpm/css-loader@6.8.1_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!../node_modules/.pnpm/postcss-loader@7.3.3_postcss@8.4.27_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!../node_modules/.pnpm/sass-loader@13.3.2_sass@1.64.2_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js!./src/scss/pages/client.scss 47.7 KiB [built] [code generated]
  css ../node_modules/.pnpm/css-loader@6.8.1_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!../node_modules/.pnpm/postcss-loader@7.3.3_postcss@8.4.27_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!../node_modules/.pnpm/sass-loader@13.3.2_sass@1.64.2_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js!./src/scss/pages/changelog.scss 57 bytes [built] [code generated]
  css ../node_modules/.pnpm/css-loader@6.8.1_webpack@5.88.2/node_modules/css-loader/dist/cjs.js!../node_modules/.pnpm/postcss-loader@7.3.3_postcss@8.4.27_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js!../node_modules/.pnpm/sass-loader@13.3.2_sass@1.64.2_webpack@5.88.2/node_modules/sass-loader/dist/cjs.js!./src/scss/pages/news.scss 19 KiB [built] [code generated]
webpack 5.88.2 compiled successfully in 12303 ms

解决方法

1. 检查Webpack开发配置的Source Map设置

断点无法绑定的核心原因通常是编译后的代码没有生成可关联的Source Map,导致调试器无法映射到原始TS文件:

  • 打开webpack/webpack.dev.ts,确认配置中存在正确的devtool设置:
    module.exports = {
      // 其他配置项
      devtool: 'source-map' // 推荐使用,或'cheap-module-source-map';避免使用'eval'类选项
    };
    
  • 若未配置则添加上述内容,重启pnpm run dev。

2. 验证TypeScript编译配置

检查项目的tsconfig.json(client目录或根目录下),确保开启Source Map生成:

{
  "compilerOptions": {
    "sourceMap": true,
    "inlineSourceMap": false,
    "outDir": "./dist" // 确保与Webpack输出目录一致
  }
}

3. 升级Node版本

日志提示当前Node版本(v18.4.0)不符合项目要求(>=18.8.0),版本差异可能导致调试工具或Webpack的Source Map生成异常:

  • 升级Node到18.8.0或更高版本,重新执行pnpm install和pnpm run dev。

4. 手动配置launch.json强制关联映射

即使之前未使用,手动添加调试配置可明确调试器的映射规则:
在.vscode/launch.json中添加:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "chrome",
      "request": "launch",
      "name": "Launch Client",
      "url": "http://localhost:3000",
      "webRoot": "${workspaceFolder}/client/src",
      "sourceMaps": true,
      "sourceMapPathOverrides": {
        "webpack:///./src/*": "${webRoot}/*"
      }
    }
  ]
}

使用该配置启动调试,替代直接运行pnpm run dev。

5. 清理缓存并重新构建

  • 执行pnpm cache clean清除依赖缓存
  • 删除client目录下的dist或build文件夹
  • 重新执行pnpm install和pnpm run dev

内容的提问来源于stack exchange,提问作者user63898

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:15:53