当前位置: 首页 > news >正文

Webstorm 前端断点调试

飞书链接,格式更好,csdn 懒得改了

起因:alert 或 console 调试,一次两次还好,多次,很烦

在这里插入图片描述

在这里插入图片描述

webstorm。前端 vue3、ts,如何打断点执行? 必须浏览器吗?webstorm 不行吗?如何打断点呢?

我的项目启动方式: “serve”: “vite serve --mode development”,

如何打断点调试呢?我现在打断点,好像没用,
你的 serve 配置是 NPM 类型的。这种配置的作用是:

  • 运行 (Run):执行 npm run serve 命令,启动 Vite 开发服务器。这没有问题。
  • 调试 (Debug):尝试调试 npm run serve 这个 Node.js 进程本身。也就是说,它会去调试 Vite 的源代码,而不是你自己的前端 Vue 代码。
    而你的断点是打在前端代码(useMessageStreamHandler.ts)里的,这段代码最终是在浏览器中运行的,而不是在 Node.js 服务器进程中运行的。
    所以,当你用这个 NPM 配置点击“Debug”时,你是在调试一个完全不同的程序,自然永远也无法命中你在前端代码里设置的断点。

正确的解决方案:两步走
你需要将“启动服务器”和“调试前端代码”看作两个独立但关联的步骤。
第 1 步:正常启动你的开发服务器
这一步你已经做对了,但要用正确的方式。不要用 Debug 按钮去启动它。

第 2 步:创建并使用正确的 “JavaScript Debug” 配置来连接浏览器
现在我们来创建专门用于调试前端代码的配置。

  1. 点击右上角的配置下拉菜单,选择 “Edit Configurations…”。
  2. 点击左上角的 + 号,在弹出的列表中选择 “JavaScript Debug”。
  3. 配置这个新的 Debugger:
  • Name: 给它起个名字,比如 “Debug in Chrome”。
  • URL: 填入你第 1 步中 Vite 启动后显示的那个地址,例如 http://localhost:5173。
  • Browser: 确保选择了 Chrome。
  1. 点击 “OK” 保存。
    第 3 步:开始调试!
    现在,你的工作流程变成了:
  2. 确保你的 npm run serve 正在运行 (通过终端或 “Run” 按钮)。
  3. 在右上角的配置下拉菜单中,选择你刚刚创建的 “Debug in Chrome” 配置。
  4. 点击它旁边的绿色小虫子(Debug)图标。
    WebStorm 现在会打开一个新的 Chrome 窗口,并自动连接到它。
  • 在新打开的这个 Chrome 窗口里操作你的网页应用,当代码执行到你设置了断点的地方时(比如 useMessageStreamHandler.ts 里的 if 语句),WebStorm 就会自动暂停,并且弹出 Debug 工具窗口让你进行调试!

vue 值查看
很好,可以打断点了
但是 vue3 代码,看起来,很不舒服,老是 target 和 handler 之类
我能不能直接看到值呢? 有什么技巧,或插件吗?
太棒了!你已经成功进入了调试的核心环节,并且遇到了每个 Vue 3 开发者都会问的经典问题。
你看到 Proxy(Object)、[[Handler]] 和 [[Target]] 是完全正常的,这是 Vue 3 响应式系统的核心工作原理。你并不是做错了什么。
让我来解释为什么会这样,以及如何轻松地看到你想要的原始数据。
为什么会看到 Proxy?
在 Vue 3 中,当你使用 reactive() 或者 ref() (对于对象) 创建一个响应式数据时,Vue 实际上是用了 JavaScript ES6 的 Proxy 功能来包裹你的原始对象。

  • 原始对象 (Target): 就是你传入 reactive() 的那个普通 JavaScript 对象。它藏在 [[Target]] 里面。
  • 代理对象 (Proxy): 这是你实际在代码中操作的对象。它就像一个“看门人”。
  • 处理器 (Handler): 当你读取或修改代理对象的属性时(比如 props.message.segments),这个 “Handler” 就会被触发,它会通知 Vue:“嘿,这个数据被访问/修改了,所有依赖它的地方都可能需要更新!”
    所以,调试器忠实地向你展示了你正在操作的变量的真实面目——它是一个 Proxy。
    如何直接看到值?(多种技巧)
    有几种非常简单的方法可以让你在调试时直接看到干净的数据。
    方法 1:手动展开 [[Target]] (最基本)
    这是最直接的方法。在调试器的变量窗口中,你看到的 Proxy 对象是可以展开的。
  1. 展开 props.message: Proxy(Object)。
  2. 你会看到一个内部属性 [[Target]]。
  3. 再次展开 [[Target]],里面就是你想要的纯净的、未经代理的原始对象和数据了!
    方法 2:使用 WebStorm 的 “Watches” 面板(强烈推荐)
    在调试窗口中,有一个 “Watches” (监视) 面板。你可以在这里添加任何你想持续观察的表达式,并且可以对它使用 Vue 提供的工具函数!
  4. 在 Debug 工具窗口,切换到 Watches 标签页。
  5. 点击 + 号 (Add to Watches)。
  6. 输入 toRaw(props.message) 并回车。
    toRaw 是 Vue 3 提供的一个工具函数,它可以返回一个响应式代理的原始对象。
    效果: 你会在 Watches 面板里看到一个非常干净的对象,不再有 Proxy 的外壳,可以直接查看所有属性。这在你需要反复查看某个复杂对象时特别有用。
    方法 3:在代码中使用 console.log 和 toRaw
    如果你想在代码执行的某个特定点打印出原始对象,可以在代码里这样做:
    import { toRaw } from ‘vue’;

// … 在你的函数内部
console.log(‘Raw message object:’, toRaw(props.message));

// 如果是 ref 对象,比如 const count = ref(0)
// 你可以直接用 .value, console.log(count.value)
// 如果是 ref 包裹的对象,也可以用 toRaw
// const user = ref({ name: ‘test’ });
// console.log(toRaw(user.value));
然后你就可以在调试器的 Console 标签页看到清晰的打印结果。
方法 4:开启 WebStorm 的 Vue 特性(一劳永逸的最佳方案!)
WebStorm 非常智能,它内置了对 Vue 的深度支持,可以帮你自动“解包”这些 Proxy 对象!

  1. 打开设置:
  • Windows/Linux: File > Settings
  • macOS: WebStorm > Preferences
  1. 导航到: Languages & Frameworks > TypeScript > Vue。
  2. 勾选 “Enable vue-specific component inspection” (启用 Vue 特定的组件检查)。
  3. 点击 OK 保存,重启你的调试会话(停止当前的 Debug,然后重新点击小虫子图标启动)。
    之后,当你再次断点时,WebStorm 的 Variables 面板会自动为你展示 [[Target]] 里的内容,并用一个特殊的图标(比如 Vue 的 Logo)标记它,让你一眼就能看到最关心的数据!
    总结与推荐
    暂时无法在飞书文档外展示此内容
    强烈推荐你立即去开启方法 4,这是 WebStorm 提供的最佳体验。然后再结合方法 2 的 Watches 面板来灵活查看特定数据,你的调试效率会大大提升!

[图片]
[图片]
没有对比,没有伤害

http://www.dtcms.com/a/286967.html

相关文章:

  • pom.xml文件中的${}变量从哪里传值
  • Couchbase 可观测性最佳实践
  • ModbusRTU转profibus网关与涡街液体流量计通讯读取流量计温度
  • Android性能优化之启动优化
  • python学智能算法(二十三)|SVM-几何距离
  • Python 入门手札:从 0 到会--第九天Python的模块化编程--模块、包以及常见系统模块和第三方模块总结
  • 微店平台商品详情接口技术实现指南
  • C语言:预处理
  • 软件测试全谱系深度解析:从单元到生产的质量保障体系
  • JavaScript笔记
  • 功能安全之BIST的基本原理
  • 关于tftp怎么把res文件夹传输给开发板的操作步骤:
  • 通过代码识别大小端模式
  • 先让 AI 学会害怕,再让它握紧方向盘
  • Unity 多人游戏框架学习系列六
  • YT Config Tool 添加FreeRTOS模块
  • 【linux V0.11】kernel(水)
  • 2025年6月GESP(C++二级): 幂和数
  • 游戏盾能否保护业务免受DDoS攻击吗?
  • Django母婴商城项目实践(五)- 数据模型的搭建
  • 【Python练习】 049. 编写一个函数,实现简单的文本编辑器功能,支持增删改查
  • 你的品牌需要一个AI首席内容官——解构BrandCraft如何解决内容创作的终极痛点
  • 枚举算法入门
  • 【2025/07/18】GitHub 今日热门项目
  • 北斗网格位置码详解:经纬度到二维网格码的转换(非极地)
  • 针对BERT模型的理解
  • 04-三思而后行:解锁AI的“内心戏”
  • VMware安装Win10教程(附安装包)虚拟机下载详细安装图文教程
  • chainlink VRF中文教程(含mock),解决error: Arithmetic Underflow in createSubscription
  • bmp图像操作:bmp图像保存及raw与bmp转换