遇到死循环时,chrome devtools可通过点击sources面板的暂停图标(⏸️)或按f8立即中断运行脚本,高亮卡住代码行,并结合scope、call stack定位异常变量与调用链。

遇到死循环时,页面会卡住、无响应,常规断点可能根本来不及触发。Chrome DevTools 提供了专门应对这种情况的机制——不用提前设断点,也能立刻中断正在疯狂执行的 JavaScript。
直接中断运行中的脚本
这是排查死循环最快速有效的方法:
- 当页面卡死、按钮点不动、控制台没输出时,先别刷新
- 打开 Chrome DevTools(F12 或 Cmd+Opt+I)
- 切换到 Sources 面板
- 点击顶部工具栏中间那个红色的 暂停图标(⏸️),或按 F8
- DevTools 会立即中断当前正在执行的脚本,并高亮显示卡在的那行代码
定位循环入口和关键变量
中断后,重点看右侧调试区:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
Scope 面板:查看当前作用域里的变量值,比如
i、count、list.length是否异常(如i一直不递增、list是undefined导致length为NaN) -
Call Stack:看函数调用链,确认是哪个函数陷入循环(比如
renderItems调用了自己,或while(true)在某个 handler 里) -
代码高亮行:如果停在
while或for的条件判断处,说明条件始终为真;如果停在循环体内部某行,可能是该行修改了不该改的变量
预防性加断点:条件断点 + 日志点
对疑似循环的代码段,提前设置更聪明的断点:
-
条件断点:右键循环起始行号 → “Edit breakpoint” → 输入
i > 1000或count === count(防 NaN),避免等它跑几万次才停下 -
日志点(Logpoint):右键同一行 → “Add logpoint” → 输入
i, count, list?.length,不中断执行但实时打印,一眼看出哪次迭代开始异常 -
在 debugger 语句处中断:临时在循环开头插入
if (i > 50) debugger;,再刷新页面
辅助排查:检查异步与事件误触发
很多“死循环”其实是逻辑循环,比如:
- 事件监听器里反复调用
setState或render,引发无限重渲染 -
setTimeout/setInterval没清除,且回调中又设了新的定时器 - Promise 链中
.then返回自身,造成隐式递归
此时可切换到 Event Listener Breakpoints(Sources 面板右侧边栏)→ 展开 Timer 或 Mouse,勾选 setTimeout、click 等,看是否被意外高频触发。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










