JavaScript 请问大家是如何调试 jQuery code 的?

ibachue · 2013年01月18日 · 最后由 krazy 回复于 2013年01月19日 · 6196 次阅读

Hi all, 和很多其他框架一样,调试用了 jQuery 的代码比没用 jQuery 的代码复杂了很多,首先是调着调着就进了 jQuery 文件的里面,然后打开任意元素的 Event Listeners(我用的是 Chrome 的调试工具)得到长长的一张列表,几乎所有事件都被监听过了,而且都是 jQuery 的监听,不知道实际是否真的被监听,callback 入口实际上在哪里。想请教各位 Javascript 高手是如何解决这些问题的,谢谢。

以前都很少用 Webkit 的调试,都是打 console.log 来看,上次前端的同时教我一下 Webkit 上面调试,真爽

#1 楼 @huacnlee 不都是断点么?

#3 楼 @huacnlee 另外 blackbird 也挺好用的

我习惯用 console.log 了。

@huacnlee @i5ting @aisensiy 楼上们 关键是我做的这个项目 JS 已经构建的非常复杂了(数万行吧,而且全都不是我做的)很多代码的阅读工作由于 jQuery 的存在根本无从下手。。

代码里直接写 debugger, 打开 chrome development tools 执行到那里自动就断了。

简单情况直接 console.log

调试你得先看自己激活了什么事件,页面逻辑基本都是 event driven 的。找到 id className 基本就知道 callback 在哪里了。你一般都不会调试 jQuery, 只会调试自己的业务逻辑。

jQuery 的 selector 是关键。

#6 楼 @iBachue 实际上还是没有做好模块化,这才是罪恶的根源

jasminejs 可以满足你的需求。边写边学很快。phantomjs.org 还提供 a headless WebKit with JavaScript API.

#9 楼 @xds2000 jasminejs?那不是一个测试框架嘛。。

#9 楼 @xds2000 加测试对现在的他来说是一个负担吧,他是分不清页面里的调用,js 太多,事件也太多导致的吧?不过你推荐的确实非常好

#9 楼 @xds2000 grunt 内置你说的哦

@shiren1118 写测试才是解决调试的办法。实在不会写,先在 it 里用 console.log 打出来看看,再加上 except matches 函数验证。之后大脑的负担就会减轻,有问题就跑一个测试,没抓到的问题加一个用例。

#13 楼 @xds2000 没理解 对于一个数万的项目写测试 还有没有可能在一个 Sprint 的时间内完成所有功能呢?

@iBachue 我的意思是你先遇到的问题,用普通 console.log 方法都搞不定的代码块写测试,总比你一行一行调试来的快吧。并且调试过程中的思路你都留了下来,对代码理解也是一次梳理。代码只有理解意思后才可能找到问题。目前楼主的代码已经相当规模,还不知道有没有用到 Copy & Paste 的代码,第三方的代码片段,你不太可能一步一步去 debuger。

#15 楼 @xds2000 我现在 手头一个项目,10 几 w 行代码,之前别人做的 1 年都没加测试,现在加非常困难。。。。。

#15 楼 @xds2000 可是我只是想找一个 callback 入口可以读代码,并不想理解其他无关的所有代码啊

看下 http://ruby-china.org/topics/6076 这个帖? 用 chrome inspector 调试的话 可以 ctrl+shift+f 打开搜索面板,然后搜事件触发元素的 id 或 class,应该就能很快找到对应的 js 代码了

#18 楼 @krazy 这也不是最快的方法 如果几个元素层层嵌套,可能难以判断 event 到底监听在哪个元素上

@iBachue 委托的那就搜 live/delegate/on/ 代码不至于乱的完全不可读吧

需要 登录 后方可回复, 如果你还没有账号请 注册新账号