最近在家调试代码,发现断点怎么都停不下来,明明在关键位置打了断点,结果程序跑得飞快,一点反应都没有。一开始以为是编辑器出问题了,重启几次也没用,后来才发现,问题可能根本不在这儿。
检查是否启用了调试模式
很多开发环境默认不开启调试模式。比如用 Node.js 时,如果直接运行 node app.js,断点是不会生效的。得加上 --inspect 参数才行:
node --inspect app.js
这时候再打开 Chrome 浏览器,输入 chrome://inspect,就能连接到调试器了。忘了这一步,断点自然就废了。
确认代码是否被正确加载
有时候你改了代码,但服务没重启,实际运行的还是旧版本。特别是用了一些热重载机制的框架,看着像更新了,其实断点位置对应的代码根本没被执行。这时候可以加个 console.log 确认一下当前代码是否真的运行到了。
留意打包工具的影响
前端项目里用 Webpack 或 Vite 打包后,源码和实际运行的代码位置可能对不上。这时候即使设了断点,也可能因为 source map 没生成或加载失败而失效。可以检查构建配置里是否开启了 sourceMap:
module.exports = {
devtool: 'source-map'
};
浏览器扩展干扰也不容忽视
有些浏览器插件会注入脚本,或者阻止调试功能。比如某些广告拦截工具会在后台屏蔽 debugger 语句。可以尝试在无痕模式下打开页面,看看断点还能不能起作用。
别忽略异步代码的执行时机
写了个定时任务或者接口回调,在里面打了断点,结果等了半天也没停下。可能是请求压根没发出去,或者响应太快,断点还没来得及触发就已经结束了。可以在异步函数开头先打个日志,确认流程走到哪了。
断点设了却不起作用,很多时候不是工具的问题,而是环境、配置或者思路出了偏差。多留心这些细节,省得浪费时间反复试错。