调试技巧

共 17 题
📑 题目列表 17 题
#
★★★

1. 断点(行、条件、logpoint、DOM)的合理使用

讲解行断点、条件断点、Logpoint、DOM 断点的合理使用?

  • 各类断点的适用场景
  • 如何选择合适断点
  • 避免无效调试

行断点用于在特定代码行暂停查看变量与调用栈,适合"我要看这段代码执行时发生了什么";条件断点在条件为真时才暂停,适合循环或高频调用中只关注特定值;Logpoint 不暂停而是打印日志,适合在循环中观察而不打断流程;DOM 断点在元素子树/属性/节点变化时暂停,适合"谁改了我的 DOM"。合理使用原则:依据"何时需要暂停"选择类型——需要看状态用行断点,需要过滤用条件断点,只需观察用 Logpoint,DOM 变化用 DOM 断点,从而减少无效暂停、提升调试效率。

断点选择的核心是"暂停成本"与"暂停价值"的权衡。盲目打行断点会频繁停顿,条件断点与 Logpoint 能精准定位、降低成本,是高效调试的关键。

#
★★★

2. Snippets 代码片段的复用

讲解 Snippets 代码片段的创建与复用?

  • Snippets 的创建与执行
  • 复用场景
  • 与 Console 的区别

Snippets 是保存在 DevTools 中的可复用代码片段,可在 Sources 面板的 Snippets 中创建,右键运行或通过 Ctrl+Enter 执行。与 Console 的一次性输入不同,Snippets 可持久保存、随时运行、可编辑,适合放"常用的调试辅助脚本":如格式化数据、注入测试数据、批量操作 DOM、模拟特定场景、抓取页面信息等。工程价值:把多次重复的调试动作固化成脚本,减少重复输入,并可在团队间共享。

Snippets 的价值在于"把调试脚本变成资产"。它介于 Console 临时命令与独立工具之间,是个人与团队调试效率提升的轻量手段。

// 在 Snippets 中保存,可随时运行
document.querySelectorAll('a').forEach(a => {
  console.log(a.textContent, a.href);
});
#
★★★

3. Workspace 本地文件映射与覆盖(Overrides)

讲解 Workspace 本地文件映射与 Overrides(覆盖)功能?

  • Workspace 映射到本地源码
  • Overrides 的本地覆盖
  • 两者的区别与应用

Workspace:把本地项目目录添加为 DevTools 工作区,将网络资源映射到本地文件,编辑后可直接写回本地磁盘,实现"改源码即生效"、可源文件映射调试与保存。Overrides:在本地保存一份资源的修改副本,编辑后 DevTools 用本地副本覆盖线上资源,用于不修改源码的情况下临时改线上页面(如改样式、改脚本的调试)。区别:Workspace 写回真实源码,适合开发调试;Overrides 只覆盖运行时资源,适合线上排查与临时验证。工程价值:两者都让"改页面"更高效,无需重新部署。

Workspace 是"开发闭环"(改源码→刷新生效→保存),Overrides 是"线上热修"(改本地副本→覆盖线上资源)。按是否要改源码选择合适的工具。

#
★★★

4. 请求阻止(Blocking)与重放(Replay)

讲解 Network 面板的请求阻止(Blocking)与重放(Replay)?

  • 请求阻止的配置
  • 请求重放的用途
  • 在调试中的应用

请求阻止(Request Blocking)可配置 URL 规则,阻止匹配的请求发送,用于模拟"某个资源不可用"的场景(如第三方脚本失败、CDN 挂了、某个接口被禁用),看看页面如何降级。重放(Replay)可重新发送某个请求(尤其是 XHR/Fetch),用于在响应值变化时反复调试接口逻辑、或验证接口是否幂等。两者结合:Blocking 测试容错,Replay 测试接口,都是 Network 面板在接口与依赖调试中的实用功能。

Blocking 是"负向测试"(断掉依赖看降级),Replay 是"重复测试"(重发请求看一致性)。它们都无需改代码即可在运行时验证行为。

#
★★★

5. xhr/fetch breakpoints 在请求 payload 的断点的工程价值

讲解 xhr/fetch breakpoints 在请求 payload 上断点的工程价值?

  • XHR/Fetch 断点的设置
  • 在 payload 上断点的时机
  • 定位请求构造与响应处理

XHR Fetch Breakpoints 允许在 URL 匹配特定模式的网络请求发出中断点,暂停在请求即将发送的代码处。此时可查看 payload(请求体)、header、以及构造请求的调用栈,从而定位"这个请求是谁发的、payload 怎么来的"。若设置 URL 关键字,只对关心的接口生效。工程价值:当"发送了错误请求/错误 payload"时,XHR 断点能精确暂停到发送点,配合调用栈找到代码源头,并可在暂停时修改 payload 或观察变量。

这类断点的价值在于"在请求出口处暂停",解决了"请求现象可观测、但来源不可知"的问题。它把定位从"抓包看结果"升级为"在发送源头断点看构造过程"。

#
★★★

6. Performance Trace 在 RUM(Real User Monitoring)

讲解 Performance Trace 在 RUM(Real User Monitoring)中的应用?

  • RUM 的意义
  • 从实验室到生产现场
  • Performance Trace 与 RUM 的关联

RUM(Real User Monitoring)采集真实用户在生产环境中的性能数据,反映"真实用户实际体验"。Performance Trace 是实验室/本地录制的详细时间线,而 RUM 通常通过 Web Performance API(如 PerformanceObserver、LCP、CLS、INP 等)在真实用户端采集核心指标并上报。两者的关联:RUM 发现"某指标在生产飙升",但 RUM 数据往往缺乏细节;此时可用 Performance Trace(或采集的 trace)在本地或特定用户会话中复现,深入定位根因。工程价值:RUM 提供"哪里出了问题",Performance Trace 提供"为什么出问题",两者互补构成完整性能观测体系。

RUM 是"广而浅"(覆盖所有用户、指标级),Trace 是"深而窄"(单次会话、细节级)。先 RUM 发现异常,再用 Trace 深挖,是性能治理的标准双轨。

#
★★

7. Chrome DevTools 的 Device Mode(移动端模拟)

讲解 Chrome DevTools 的 Device Mode(移动端模拟)功能?

  • 设备模拟的视口与设备
  • 触摸与 UA 模拟
  • 模拟的局限

Device Mode 通过点击 DevTools 左上角的设备图标开启,可模拟不同设备的视口尺寸、设备像素比(DPR)、触摸事件、UA 字符串等,也可自定义设备。它用于快速查看页面的移动端布局、响应式表现与触摸交互。局限:它只是"模拟",无法完全还原真实设备的 CPU/GPU 性能、网络与硬件渲染,因此性能与某些行为仍需真机验证。工程价值:在开发阶段快速验证响应式与移动端交互,是移动端适配的日常工具。

Device Mode 解决"视口与触摸"的模拟,但性能与真机渲染差异大。理解其边界,避免把模拟结果误当真实移动端表现。

#
★★

8. Chrome DevTools 的 Sensors(地理位置、加速度计)

讲解 Chrome DevTools 的 Sensors 面板(地理位置、加速度计)的模拟?

  • Sensors 面板的模拟能力
  • 地理位置模拟
  • 设备传感器模拟

Sensors 面板(Sensors 标签)可模拟地理位置(经纬度)、设备方向(orientation)、加速度计、触摸等,用于调试依赖这些传感器的功能。地理位置模拟可覆盖 geolocation API 的返回值,加速度计/方向用于测试设备方向相关交互(如重力感应、横竖屏)。工程价值:在桌面开发时即可模拟移动端传感器场景,无需真实移动设备,快速验证依赖定位或传感器功能的逻辑。

Sensors 把"依赖硬件或定位"的功能变成桌面可测场景,覆盖了 geolocation 与 deviceorientation 等 API,是移动功能开发与测试的便利工具。

#
★★

9. Chrome DevTools 的 $_ 与 $0~$4 在控制台的工程应用

讲解 Chrome DevTools 控制台中的 $_ 与 $0~$4 的工程应用?

  • $_ 与 $0~$4 的含义
  • 在控制台中的组合使用
  • 提升调试效率

$_ 代表上一次在控制台求值的结果,可避免重复输入;$0~$4 分别引用最近在 Elements 面板选中的 1~5 个元素,$0 是最新选中的。工程应用:在 Elements 选中元素后,用 $0 直接操作(如 $0.style.backgroundColor='red'、$0.textContent);用 $_ 复用上一次结果(如先算一个值,再基于它继续运算)。这些快捷方式让控制台与 Elements 的配合更顺畅,是高频调试技巧。

$0~$4 是"Elements 与 Console 的桥梁",$_ 是"结果复用"。它们减少了重复选择与输入,让调试操作更接近"直接操作目标"。

// 在 Elements 选中元素后,在 Console 执行
$0.style.color = 'red';      // 改选中元素样式
$0.textContent.length;       // 读取选中元素
const sum = 1 + 2; sum;      // $_ 此时为 3
#
★★

10. Chrome DevTools 的 Performance Insights 在关键渲染路径的诊断

讲解 Performance Insights 在关键渲染路径诊断中的应用?

  • 关键渲染路径的概念
  • Performance Insights 的洞察
  • 从洞察到优化

关键渲染路径(Critical Rendering Path)指浏览器从 HTML/CSS/JS 到首屏像素呈现所经历的关键步骤(解析、CSS 处理、布局、绘制、合成)。Performance Insights 面板自动分析录制,把关键路径中的瓶颈归类为可操作洞察(如渲染阻塞、长任务、布局偏移、资源加载),并给出建议。它在诊断首屏渲染时尤其有用:能指出哪些资源阻塞了首次渲染、哪些长任务延迟了绘制。工程价值:Performance Insights 把"看原始火焰图"的高门槛,变成"给出可操作建议"的低门槛,加快关键路径优化。

关键路径优化的核心是"减少阻塞首屏的步骤与资源"。Performance Insights 自动关联瓶颈与建议,相比手翻火焰图更高效,适合快速诊断与迭代。

#
★★

11. Chrome DevTools 的 Network 面板的 HAR 导出与协作的工程价值

讲解 Network 面板的 HAR 导出与协作的工程价值?

  • HAR 的格式与内容
  • 导出与导入
  • 协作与排障

HAR(HTTP Archive)是标准化的 HTTP 请求日志格式,记录了每个请求的 URL、方法、headers、timing、响应等。Network 面板可导出 HAR 文件,也可导入 HAR 查看。工程价值:HAR 是"网络请求的完整快照",可导出分享给后端/同事排查问题,即使对方没有原始页面也能完整分析请求时序、耗时与响应;也可用于建立性能基线、回放分析、或作为 bug 报告附件。它便于跨团队协作与问题复现。

HAR 的价值在于"可移植、可分享、标准化"。它把瞬时的网络状态固化成文件,是跨团队、跨环境协作排障的关键抓手。

#
★★

12. Chrome DevTools Issues 面板与跨源 cookie deprecation 警告的工程价值

讲解 Chrome DevTools 的 Issues 面板及其对跨源 cookie deprecation 警告的工程价值?

  • Issues 面板的作用
  • 跨源 cookie 弃用警告
  • 第三方 Cookie 过渡的应对

Issues 面板集中展示浏览器发现的问题与警告(如 Cookie 问题、Mixed Content、安全漏洞、API 兼容性),并给出原因与修复建议。跨源 cookie deprecation 是其中重要一类:Chrome 逐步弃用第三方 Cookie(Third-Party Cookies),Issues 面板会警告站点中使用跨源/第三方 Cookie 的情况,提示迁移到第一方 Cookie、SameSite 属性或新的替代方案(如 CHIPS、Storage Partitioning)。工程价值:Issues 面板让开发者提前发现第三方 Cookie 弃用风险,避免未来功能失效。

Issues 面板把"沉默的浏览器行为"变成"显式警告与建议"。跨源 cookie 弃用是政策级变化,提前通过 Issues 识别并迁移是避免线上事故的关键。

#
★★

13. Chrome DevTools 的 console.log 的格式化(%c、%o)的现代实践

讲解 console.log 的格式化(%c、%o 等)的现代实践?

  • %c 样式格式化
  • %o 对象格式化
  • 其他格式符与应用

console.log 支持格式化占位符:%c 用于给后续文本应用 CSS 样式(如颜色、字号、背景),适合在控制台高亮区分不同日志;%o 以对象形式展开(对 DOM 元素显示为 DOM 节点)、%O 则把 DOM 元素也以 JavaScript 对象形式打印;还有 %s(字符串)、%d(整数)、%f(浮点)。现代实践:用 %c 给日志加颜色与样式,让海量日志更易读;结合 console.group 组织日志层级;用 console.table 输出表格。工程价值:格式化让控制台日志更结构化、可读,提升调试与排查效率。

格式化是"让日志变得更清晰"的细节技能。%c 样式化、%o 对象化、console.group 分组,都是让日志从"一堆文字"变成"可扫描信息"的实践。

console.log('%c高风险', 'color: white; background: #e03131; padding: 2px 6px; border-radius: 3px;', '对象:', obj);
console.log('%o', { a: 1, b: 2 });   // 对象形式展开
#
★★

14. Chrome DevTools 的 Network Throttling 在慢网络模拟的工程实践

讲解 Chrome DevTools 的 Network Throttling 在慢网络模拟中的工程实践?

  • 预设节流配置
  • 自定义节流
  • 慢网络下的性能与降级

Network Throttling 提供预设配置(如 Offline、Slow 3G、Fast 4G),也可自定义带宽、延迟与丢包率。工程实践:在开发/测试阶段用 Slow 3G 模拟弱网,验证首屏加载、懒加载、错误处理与降级策略;用自定义节流模拟特定网络环境,测试资源加载顺序与超时处理。结合 CPU 节流可进一步模拟低端设备。工程价值:在慢网络下提前发现加载慢、资源过大、超时无降级等问题,避免上线后弱网用户体验差。

慢网络模拟的核心是"提前暴露弱网问题"。它把真实弱网环境固化为可复现的测试条件,配合降级策略验证,是提升移动端体验质量的关键。

#

15. Chrome DevTools 的 chrome://flags 在实验功能的工程应用

讲解 chrome://flags 中实验功能的工程应用?

  • chrome://flags 的作用
  • 启用实验功能
  • 工程应用与风险

chrome://flags 是 Chrome 的实验功能开关页面,可启用/禁用尚未默认开放的实验特性(如新的渲染、性能、API 特性)。工程应用:开发者在正式发布前用 chrome://flags 提前启用并测试新特性、验证兼容性、或复现特定行为;也可用于批量禁用某些不稳定实验避免影响。风险:实验功能可能不稳定、有性能或兼容问题,且每用户每设备需手动设置,不应作为生产依赖。工程价值:用于功能预演、兼容性验证与团队内部测试。

chrome://flags 的价值是"提前接触实验特性"。它适合测试与预演,但不应成为生产依赖,且需注意其不稳定性与手动设置的成本。

#

16. Chrome DevTools 的 Animations 面板的动画调试与编辑的现代实践

讲解 Chrome DevTools 的 Animations 面板的动画调试与编辑?

  • Animations 面板的能力
  • 慢放与暂停
  • 调整动画参数

Animations 面板可捕获页面上运行的 CSS 动画与过渡,并列出它们的时间线。它支持暂停/继续动画、慢放(如 10% 速度)、拖拽时间轴调整动画的时长与延迟、修改动画参数并实时预览。工程价值:当动画"看起来不对"(太快、太慢、卡顿)时,可用 Animations 面板慢放观察、调整参数快速定位是动画时长、延迟还是缓动函数的问题,无需改代码反复刷新。

Animations 面板把"动画调试"从"改代码→刷新→看效果"的循环,变成"可视化慢放 + 拖拽调整"的即时反馈,显著提升动画调试效率。

#

17. Chrome DevTools 的 DOM Breakpoints(子树修改、属性修改)

讲解 Chrome DevTools 的 DOM Breakpoints(子树修改、属性修改)?

  • DOM Breakpoints 的类型
  • 触发时机
  • 定位 DOM 修改来源

DOM Breakpoints(DOM 断点)可在选中元素上设置三种:Subtree modification(子树增删节点)、Attribute modification(属性变化)、Node removal(节点被移除)。当对应变化发生时,调试器暂停到触发修改的 JavaScript 代码处,结合调用栈可确定是哪个函数、哪一行修改了 DOM。等价于 Elements 面板的 Break on。工程价值:定位"谁改了我的 DOM/谁删了我元素/谁动了 class"这类问题,常用于排查第三方脚本或框架行为。

DOM 断点把"观察 DOM 变化"变成"在源头暂停",配合调用栈即可从效果反推原因,是定位"DOM 被谁修改"的利器。