本文目录导读:

- 核心原则:先分段,再定位
- 前端调试(浏览器 - 以 Chrome DevTools 为例)
- 后端调试(以 VS Code + Node.js/Python 为例)
- 通用调试技巧与思维
- 总结:遇到 Bug 时,系统性地思考
排查 bug 是软件开发中最核心的技能之一,使用调试工具(Debugger)而不是凭空猜测,能让你更快、更准地找到问题根源。
下面是针对主流场景(前端、后端、移动端、通用)的调试工具使用指南,按步骤说明。
核心原则:先分段,再定位
- 复现:稳定复现 bug 的步骤。
- 分段:确认 bug 出现在哪个环节(输入、处理、输出、存储?)。
- 定位:用调试工具逐步缩小范围,找到精确的代码行。
- 修复 & 验证。
前端调试(浏览器 - 以 Chrome DevTools 为例)
这是最常见、功能最强大的调试环境之一。
必用功能与排查步骤:
断点(Breakpoints)—— 最核心
- 场景:某个函数执行结果不对,或点击按钮后没反应。
- 操作:
- 打开 F12 -> Sources(源代码)面板。
- 找到要调试的 JS 文件,点击行号旁边的数字,设置红色断点。
- 刷新页面或触发操作,代码会在断点处暂停。
- 高阶技巧:
- 条件断点:右键点击行号 -> “Add conditional breakpoint”,输入条件,如
i > 100或user.name === 'admin',只在条件成立时暂停,避免几千次循环。 - DOM 断点:在 Elements 面板,右键某个 HTML 元素 -> Break on -> 选择“子节点变动”、“属性修改”或“节点移除”,当对应的 DOM 被脚本修改时,自动定位到修改它的代码行,非常适合排查“某个元素为什么突然消失了/变了”的 bug。
- 事件监听器断点:在 Sources 面板右侧,有一个 “Event Listener Breakpoints” 列表,勾选
click或keydown等事件,页面任何元素触发该事件时都会暂停,适合排查“点击没反应”或“误触发了事件”的问题。
- 条件断点:右键点击行号 -> “Add conditional breakpoint”,输入条件,如
控制台(Console)—— 快速验证与日志
console.log():虽然原始,但很有效,在疑似出错的代码前后打印变量值。console.table():打印数组或对象时,用表格形式展示,一目了然。console.assert(条件, '错误信息'):只在条件为false时打印错误,避免大量无用的输出。console.trace():打印调用堆栈,当你不知道当前函数是被谁调用时,加上这一句。- Sources 面板的 Console:当代码暂停在断点时,控制台的作用域(Scope)就是当前暂停处的变量上下文,你可以在控制台直接输入变量名查看值,甚至可以执行
x = 10这样的赋值来临时修改数据,然后恢复运行看效果,这是活调试的精髓。
网络(Network)—— 排查 API 请求与资源
- 场景:页面数据加载不出来,或提交表单后没反应。
- 操作:打开 Network 面板,刷新页面。
- 查看请求是
pending、200还是404/500。 - 点击具体请求,看 Headers(请求头、参数)、Payload(发送的数据)、Preview 或 Response(服务器返回的数据)。
- 关键:用 “Initiator”(发起者)列,可以直接跳转到发起该网络请求的那一行 JS 代码。
- 查看请求是
React/Vue 开发者工具
- React DevTools:可以查看组件的
props、state、hooks值,当组件渲染不对时,点一下就能看到所有状态,比console.log一堆好用很多,还能查看组件高亮和性能火焰图。 - Vue DevTools:类似,可以修改组件数据,实时观察页面更新。
后端调试(以 VS Code + Node.js/Python 为例)
VS Code 自带强大的调试器,集成度高,是后端调试的首选。
核心操作:配置 launch.json
- 设置断点:在代码行号左侧点击,出现红色圆点。
- 启动调试:按
F5,选择对应的环境(Node.js、Python、Java 等)。 - 调试工具栏:代码暂停后,顶部的控制条:
F10单步跳过:一行一行执行当前函数,不看函数内部细节。F11单步进入:进入当前行调用的函数内部,仔细看它是怎么执行的(非常关键)。Shift+F11单步跳出:快速执行完当前函数,回到调用它的上一级。F5继续(恢复):执行到下一个断点。
- 变量面板(左侧):可以看到所有局部变量、全局变量、闭包的实时值,还可以在“监视”(Watch)里添加
this、x+y这样的表达式。 - 调用堆栈(Call Stack):展示了函数调用链,点击堆栈的层级,可以看到当时那一层的变量值。这是“回放”执行流程、理解代码逻辑的利器。
典型场景:Web 应用后端
- 排查请求处理:
- 在 API 处理函数的第一行设置断点。
- 用 Postman 或浏览器发送请求。
- VS Code 自动暂停,你可以在变量面板看到
req.body,req.params,确认请求数据是否正确到达了后端。 F10逐行执行,看业务逻辑,看数据库查询的结果是否正确。- 如果数据库查询失败,可能是 SQL 写错了,或数据库连接断了,在查询语句处设置断点,复制出查询语句,直接在数据库客户端里跑一下,看是否真的能查到数据。
通用调试技巧与思维
二分法定位
- 如果一个很长的函数崩了,或数据错了。
- 不要从头到尾逐行看代码,而是在代码的中间位置(比如第 50 行,总共 100 行)设一个断点。
- 如果运行到中间断点时,数据已经错了,说明 bug 在前 50 行,否则在后 50 行。
- 重复此过程,可以非常快地(log₂N 步)缩小范围。
使用“日志点”(Logpoints)
- 不想修改代码加
console.log,又不想设断点暂停? - 在 Sources 面板(浏览器)或 VS Code 里,右键行号 -> “Add Logpoint”(添加日志点)。
- 输入一个表达式,
"user id is: " + userId,程序运行到这里时不会暂停,但会在控制台输出这条信息。非常适合在高频循环或大量请求中做标记。
异常断点(Break on Caught/Uncaught Exceptions)
- 程序静默地崩溃(Uncaught exception),没有报错,但功能失效了。
- 操作:在 VS Code 的调试面板或 Chrome Sources 面板中,有一个暂停图标/选项,可以勾选“所有异常”(Pause on Caught Exceptions)或“未捕获的异常”(Pause on Uncaught Exceptions)。
- 这样只要代码抛出异常(即使被
try-catch捕捉了),调试器自动暂停在抛出异常的那一行,这是定位“奇怪崩溃”的终极手段。
条件断点 + 日志点 组合拳
- 假设你发现
processOrder()函数在处理订单 ID 为 10032 的订单时算错了价格。 - 可以设置一个条件断点:
order.id === 10032,这样程序运行时会直接停在此处,其他订单正常执行,然后用F10慢慢走,看是哪个变量计算出了意想不到的值。
遇到 Bug 时,系统性地思考
- 复现:能不能稳定复现?
- 现象:预期结果是什么?实际结果是什么?两者之间的具体差异是什么(比如值不同、颜色不对、报错了、没反应)?
- 分段:bug 在前端、后端、网络传输、还是数据存储?
打开浏览器 Network,看 API 返回的数据对不对?如果对,是前端渲染或状态管理的问题;如果不对,是后端接口或数据库的问题。
- 定位:如果是代码逻辑问题,设置断点 + 单步调试。
- 修复:修改代码,运行测试,再次复现确认。
最后建议:下决心花一天时间专门学习你所用工具的调试器(Chrome DevTools 的“调试器”教程,或你 IDE 的调试入门视频)。掌握调试工具后,排查 bug 的时间至少能减少 80%。
标签: 排查
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播