找回密码
 加入怎通
查看: 809|回复: 7

[其他] 有哪些 JS 调试技巧?

[复制链接]
diyi123yi 发表于 2012-06-06 10:57:08 | 显示全部楼层 |阅读模式
   我大概是从 08、09 年从 Firebug 转入 Chrome Developer Tool,一直用到现在,越用越喜欢。我平时调错时常用的功能有:
% t2 G+ ?$ Q& j/ a! f; q& Z代码格式化
) o( v8 i& W7 L, h& R, n4 x  可以将被压缩的代码自动展开
+ d* b& e2 ~; U  J' Z  N实时代码编辑
# ~6 t  {: R% k9 W9 H# R1 O% _- q  可以在运行时动态改变 JS 代码,并且不需要刷新页面就可以看到效果,一般用这个实时的在代码里插 console.log- D7 G1 g+ J' M; I& D6 g7 B' ]' B
DOM 事件/XHR 断点2 _3 T6 y2 O& v3 j2 d2 N, t
  可以针对 DOM 结构改变/属性改变/键盘鼠标事件 等下断点,直接断到事件的第一个 listener 函数上。还可以对 XHR 请求下断点,断到发起请求的那一行代码上
1 m' v; ^0 g. l2 l4 |8 y调用栈分析8 H6 e! N' q+ ^7 ~! B' w2 @" @
  这个非常常用,Scripts 面板下右上角的那一部分9 l3 ^4 [0 |! R! n$ ]* C
自动异常断点4 t) `$ w5 u/ K0 _; o. F
  当代码执行出错时,可以自动断到出错的代码行上,直接分析出错时的运行时环境/ t9 I8 l: `/ R9 Q
分析 HTTP 请求1 i* Q; t/ n& `- W# O' b
  Network 面板下列出了所有的 HTTP 请求,可以很方便的查看请求内容、HTTP 头、请求时间等信息3 @, L3 v9 x' A2 U+ K0 D4 f; d
  以线上代码出 Bug 为例。一般上手第一步是使用代码格式化功能将被压缩的线上代码展开,然后开启自动异常断点,尝试重现 Bug。当 Bug 出现时代码会自动断到出错的那一行。然后通过调用栈分析结合控制台找到最开始出错的那个函数上。一般的 Bug 到这里就算找出来了,但是如果这个 Bug 是在事件回调函数或者 XHR 回调函数上,就得结合 DOM 事件断点和 XHR 断点 进一步往上找哪个函数出错。另外,如果是发给服务器请求没有得到正确的 response,可以通过 Network 面板查看请求的参数、Cookie、HTTP 头是否有误。) H- Y3 `) y3 S4 p3 |1 J$ I5 Z
  另外,还可以通过 Charles/Nginx/Fiddler 等工具将远程 js 代码映射到自己的电脑上,免去了代码格式化的麻烦,还可以直接编辑。
" w! D$ S2 Y4 D+ i
! |4 f2 }/ V3 W9 F2 L还有些比较小的 Tips:* a$ J, w7 a4 k+ Q. c, Q
console.group/console.groupEnd 可以将 log 信息分组展示,看起来更舒服
. U3 \' C4 S* ^: h1 Uconsole.warn/console.error 可以输出 warning 和 error log! X4 F* M' X/ u2 m# w  J0 U
element 面板右侧实时编辑的 css 样式,可以在 resource 面板里保存起来& M9 S  o- K( p% u; t3 E" k6 Y5 ?
关于样式还有个技巧,Elements 面板右上角的 styles 栏,右侧有三个图标,功能依次是:根据当前元素创建一个 css 样式、模拟 :hover/:active 等伪类、颜色值类型选择。实用
  i$ p2 N4 ^; S) h/ X% I' t, \( {resource 面板可以删除和修改 cookie/localstorage6 C2 X. ~/ P  `! p0 |
scripts 面板下的 ctrl+o 可以快速跳转脚本文件,ctrl+shift+o 快速跳转函数) u; K: u4 D* _! C4 G0 w
右下角的齿轮图标里有个选项是开发者工具和网页左右分屏(Dock to the right,默认是上下分屏),宽屏必备" a' o4 d+ C$ `' k  q
接上,还有个选项是禁用 Cookit,必点
6 J( O% r! F# T' }2 l  |接上,在选项面板里还可以手工编辑 user agent 和模拟触摸事件
% c" s  t! A  o% h最后说说 IE 6 的调试,我是这么个流程:
" l0 s5 G0 K" x1 e% H7 f8 o首先尝试在 Chrome 下重现该 Bug,如果能重现,就先把 Chrome 里能重现的 Bug 修了。确定 Chrome 里 OK,但是 IE 6 有问题,再继续下一步
3 V2 b3 l# \( h$ L' R2 H到 IE 里首先尝试高版本 IE,比如 IE 9。E 9 的开发者工具还不错,也可以下断点,调用栈分析、控制台样样都有。如果 IE 9 里没问题,那就继续尝试 IE8,一直定位到能重现该问题的最高版本的 IE 上。即使是 IE 7,其开发者工具也还是勉强能用的……如果不幸的碰上一个 IE 6 only 的 Bug,那就只有继续下一步3 n7 U' Z, c5 j7 z: g! Z! g
到这一步的话一般就是最苦逼的时刻。IE 6 实在是没有太好用的 JS 调试工具(据说 Visual Studio 可以调,我没用过,欢迎补充)。这时候一般就是二分+alert的土法定位到出错行,加上耐心和时间,还有一点点运气。这一步的话强烈推荐开 Fiddler。 , v& ]! b0 O3 e
0 P" e: e% C( ~4 F  t; G7 O
妇科医院 www.hspayy.com : A7 o$ n: a+ ~7 |" U8 a: e# E( ?
微创男科 www.ljpayy.com
6 D# P" K+ d- A5 c6 Z, @装修论坛 www.qcwall.com

暂时无法加载帖子列表

回复

使用道具 举报

孤单荒凉 发表于 2026-02-24 04:52:47 | 显示全部楼层
蹲了这么久,终于看到有价值的讨论,支持一下!
回复

使用道具 举报

回忆快乐 发表于 2026-07-31 20:28:44 | 显示全部楼层
说得很实在,没有夸大其词,这种真实分享太难得了
回复

使用道具 举报

ぃ晨曦ゝ 发表于 2026-08-09 23:11:34 | 显示全部楼层
学习到了,之前一直没注意过这个点,受教了
回复

使用道具 举报

gao321 发表于 2026-09-10 12:25:32 | 显示全部楼层
刚好遇到类似问题,看完这个帖子心里有底了
回复

使用道具 举报

落魄_Triste_- 发表于 2026-10-11 12:25:19 | 显示全部楼层
楼主太厉害了,整理得这么详细,必须支持
回复

使用道具 举报

蓝色海风 发表于 2026-10-20 21:05:22 | 显示全部楼层
完全赞同,我也是这么认为的,英雄所见略同~
回复

使用道具 举报

头像被屏蔽
1519138366 发表于 2026-10-25 10:17:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 加入怎通

    本版积分规则

    QQ|手机版|小黑屋|网站地图|真牛社区 ( 苏ICP备2023040716号-2 )

    GMT+8, 2026-10-28 00:10 , Processed in 0.042181 second(s), 26 queries , Gzip On.

    免责声明:本站信息来自互联网,本站不对其内容真实性负责,如有侵权等情况请联系420897364#qq.com(把#换成@)删除。

    Powered by Discuz! X3.5

    快速回复 返回顶部 返回列表