浏览器调试的几个小技巧

414 阅读3分钟

前端调试除了代码写 debugger,打印 log,尤其是在生产环境,不能编辑代码的情况下如何处理呢?在浏览器中 sources 标签页有这几个功能(按照使用频度排序):

  1. 断点(Breakpoints)
  2. 调用栈信息(Call Stack)
  3. 作用域信息(Scope)
  4. 额外脚本 (Snippets)
  5. 覆盖脚本(Overrides)
  6. 事件监听断点(Event Listener Breakpoints)
  7. 代码格式化(Pretty print) image.png

断点(Breakpoints)

浏览器断点有以下几种类型:

  • 普通断点(breakpoint)
  • 条件断点(conditional breakpoint)
  • 日志断点(log point)

image.png

标题普通断点条件断点日志断点
功能代码运行时暂停在当前行,便于查看变量代码运行到当前位置并且满足条件才暂停代码运行到当前位置不暂停,但是可以打印变量
添加方式点击左侧行数位置,或者在行号右键如上图中1在行号右键如上图中2,编辑暂停条件image.png代码运行到当前位置不暂停,但是可以打印变量 image.png

调用栈信息(Call Stack)

在断点位置可以看到当前函数调用堆栈,并且可以通过点击前序调用栈看到当时执行上下文。

20240813140958_rec_.gif

作用域信息(Scope)

当代码暂停在一个位置的时候,可以看到当前调用栈的信息,并且可以通过调试的单步功能,看到变量对应变化。在对应变量上右键可以将对象保存到全局变量中,方便在控制台额外处理。

image.png

额外脚本 (Snippets)

在左侧可以找到 Snippets 选项,在这里可以创建用于调试的脚本。脚本执行时以当前执行上下文继续执行,可以调试当前的变量。
常用的使用场景比如,在 promise 或者事件订阅,需要异步处理的情况时,在脚本中额外增加一个订阅,可以在脚本中调试值。
另外也可以将 Snippets 当成一个可以调试 JS 的工具,相当于 VS code 的 debug 模式。

image.png

覆盖脚本(Overrides)

线上环境的问题修改该怎么验证呢?这就是其中的一个方式。Overrides content 允许我们复制一个文件并且自行修改,并且在执行对应脚本的时候用本地脚本替换在线脚本。
以下可以创建一个选中文件的本地文件副本,如果第一次使用在调试工具上方会存在弹窗请求权限。对应文件会保存在 Overrides 选项卡中。\

image.png 如果需要结束本地覆盖,需要在 Overrides 中删除对应文件。对应 network 也有类似的本地 mock 请求的功能。

代码格式化(Pretty print)

线上代码调试的时候有的时候因为打包工具将代码混淆到一行,导致打断点调试不方便。Pretty 功能就解决了这个问题,点击之后将一行代码拆分成多行,并且增加缩进等。 image.png

参考链接:

谷歌开发者文档:developer.chrome.com/docs/devtoo…