Cursor(vscode) debug for Chrome

本篇文章的内容为如何使用 cursor 调试,通过 xswitch 线上代理的项目。


背景

我们在平时调试的时候,大多数情况下只是在 Chrome 浏览器自带的调试工具下调试,cursor 里也有调试功能,如何用 cursor 去调试我们的代码呢?

cursor 调试的好处?遇到一些问题,我们可以直接修改源代码进行调试,而不是在 chrome 控制台进行调试。

接下来我们一起看下如何使用 cursorchrome 进行连接调试。


前置知识

  • sourceMap 的映射
  • 基础的调试配置

✍️ Cursor 配置

具体配置大家可以通过 AI 和自己实操来进行查看学习。

在项目根目录下创建 .vscode/launch.json

json 复制代码
{
  // 指定 launch.json 配置文件的版本号
  "version": "0.2.0",
  // 包含所有调试配置的数组
  "configurations": [
    {
      // 调试配置的显示名称,会在 VS Code 调试面板的下拉菜单中显示
      "name": "Debug: Chrome (XSwitch)",
      // 表示使用 Chrome 浏览器的调试器
      "type": "pwa-chrome",
      // 调试请求类型,"attach" 表示附加到已运行的进程,而不是启动新进程
      "request": "attach",
      // 指定要附加到的进程的端口号
      "port": 9222,
      // 指定 Web 应用的根目录
      "webRoot": "${workspaceFolder}",
      // 指定源代码映射的路径覆盖规则
      "sourceMapPathOverrides": {
        "webpack://rms-prod-front-alarm-/src/*": "${workspaceFolder}/src/*",
        "webpack://rms-prod-front-alarm-/*": "${workspaceFolder}/*"
      },
      // 启用智能步进功能
      "smartStep": true,
      // 指定跳过哪些文件的调试
      "skipFiles": [
        "<node_internals>/**",
        "${workspaceFolder}/node_modules/**",
        "${workspaceFolder}/.umi/**"
      ]
    }
  ]
}

⛷ 浏览器配置

remote-debugging-port

浏览器需要开启一个临时的调试服务器来供 chromevscode 进行通信。

shell 复制代码
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222

我们可以通过 --remote-debugging-port 为 9222 来指定。

userDataDir

远程调试需要指定 userDataDir 参数。

userDataDir 是保存用户数据的地方,比如你的浏览记录、cookies、插件的数据等等。

我们指定 userDataDirfalse 打开浏览器看看效果:

shell 复制代码
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --user-data-dir=false

可以看到打开了一个新的浏览器,这个浏览器没有任何数据

我们在启动的时候加了个调试服务器,输入 localhost:9222/json,这里的调试服务器会出现各页面的临时 websocket 服务器信息。


Chrome 136 版本后的变化

Chrome 136 版本之前,我们可以使用默认的保存数据的地方进行调试,这样打开浏览器之后就有我们之前配置的数据了。

但是在 136 之后,chrome 要求我们打开调试服务器的时候必须要指定一个新的 userDataDir,为了保护我们的数据安全。

参考:developer.chrome.com/blog/remote...


解决方案:复制浏览器缓存目录

那我们要通过 cursor 调试我们的项目,是必须要使用之前的数据的,比如 xswitch、登录信息等等。

我们可以把浏览器缓存的位置复制一份作为一个新的用户目录。

把缓存的文件复制到 /Users/admin/Desktop/chromeStorage2,然后执行以下命令启动浏览器:

shell 复制代码
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --user-data-dir=/Users/admin/Desktop/chromeStorage2

关闭 Chrome 浏览器,执行这个命令,启动浏览器。

可以看到浏览器的代理服务器已经正确运行,而且也能正常加载我们的本地缓存数据(xswitch 配置、登录信息等)。


😼 打通 Cursor 与 Chrome

万事俱备,接下来我们就要打通 cursorchrome 的调试了。

前提条件

⚠️ 前提!!!代理的情况下必须保证 sourceMap 有正确映射加载。

确保 console.log 映射的是本地的源文件(如 useProtableProps.tsx:76),而不是编译后的代码。

sourceMapPathOverrides 配置说明

json 复制代码
"sourceMapPathOverrides": {
  "webpack://rms-prod-front-alarm-/src/*": "${workspaceFolder}/src/*",
  "webpack://rms-prod-front-alarm-/*": "${workspaceFolder}/*"
}

这里的 webpack://rms-prod-front-alarm-/src/* 对应的就是当前文件的 webpack 路径。

这里一定要设置好,不然断点就不能正确映射本地文件。

如何查看 webpack 路径?在 Chrome DevTools 的 Sources 面板中,找到对应文件,查看其路径前缀即可。

启动调试

  1. cursor 的调试面板选择 Debug: Chrome (XSwitch) 配置

3. 点击运行(F5)开始调试

  1. 在代码里打上断点
  2. 在浏览器中触发对应操作(如点击查询按钮)

cursor 里就会发现已经代理调试成功了,断点命中,可以看到完整的变量信息和调用堆栈。


总结

至此我们就做到了在 cursor 里调试代码了!

整体流程:

sql 复制代码
复制 Chrome 用户数据目录
    ↓
以 --remote-debugging-port=9222 启动 Chrome
    ↓
配置 .vscode/launch.json(注意 sourceMapPathOverrides)
    ↓
确保 devtool 使用 eval-cheap-module-source-map
    ↓
Cursor 附加调试 → 打断点 → 触发操作 → 调试成功 ✅
相关推荐
远方的小草3 小时前
线上调试代码,试试SourceMap?
前端
whuhewei3 小时前
React Fiber架构
前端·react.js·架构
陆枫Larry3 小时前
微信小程序:如何优雅地修改富文本(u-parse/rich-text)内部样式?
前端
远方的小草3 小时前
Nginx 反向代理
前端
英俊潇洒美少年3 小时前
通用构建优化(编译阶段)+ Vue 专属运行时优化 + React 专属运行时优化
前端·vue.js·react.js
慕斯fuafua3 小时前
CSS——样式
前端·css
英俊潇洒美少年3 小时前
Vue 和 React 的核心渲染机制 对比
前端·vue.js·react.js
Beginner x_u3 小时前
前端八股整理|VUE|高频小题 01
前端·javascript·vue.js
笨笨狗吞噬者3 小时前
代理的妙用:uni-app 小程序是怎样用 `Proxy` 和 `wrapper` 抹平平台差异的
前端·微信小程序·uni-app