js调试系列 源码定位与调试[基础篇]


Posted in Javascript onJune 18, 2014

我们先来处理第一个问题:1. 查看文章下方 推荐 这个功能所调用的函数源码
其实非常简单,点放大镜选中那个推荐即可。
js调试系列 源码定位与调试[基础篇]
这个  votePost(cb_entryId,'Digg')  就是推荐按钮所调用的函数了,是不是非常简单。

第二个问题,定位到函数所在文件位置。
其实也是非常简单的,当然,不熟悉控制台的朋友也许不知道怎么看。
我在控制台输入 votePost 然后回车,
js调试系列 源码定位与调试[基础篇]
函数源码粗显啦,并且在右下角有个链接 blog-common.js?v=WE8o1xrgcTu07QVvwYqERqD7AA8fdJp_dgoE-crAT3k1:1 这个是什么意思呢?
后面的 v=WE8o1xrgcTu07QVvwYqERqD7AA8fdJp_dgoE-crAT3k1 直接忽略好了。

ps: 如果想知道这个是什么东西,其实就是个版本号,至于什么作用,往往是防止缓存的,具体自己上网搜索吧。
blog-common.js:1 差不多就是这个意思。。
blog-common.js 是这个函数所在的js文件
1 是代码所在的行号。

直接点击这个链接,就可以跳转到 Sources 面板,这个就是源码面板,调试最重要的一个功能,之后会慢慢介绍。
js调试系列 源码定位与调试[基础篇]

可是所有代码都在一行,我们改怎么看? 4946 个字符呢,全缩在一行上。。
chrome 给我们提供了一个代码格式化的功能,点击下方那个 Pretty print 按钮即可格式化代码。
js调试系列 源码定位与调试[基础篇]

格式化完毕之后就是非常美观的代码了,至于看不看的懂,那是另一回事了。
有的看不懂可能是代码被UglifyJS,Google's Closure之类的工具编译过,如 jquery.min.js 文件。
还有可能是水平太次了,暂时看不懂大神写的代码,那我也无能为力,你只能自己加油了努力提升实力了。
如果格式化够找不到函数所在位置,也不要着急,有我在,慌啥?
回到刚才控制台面板。
js调试系列 源码定位与调试[基础篇]
你欣喜的发现,blog-common.js?v=WE8o1xrgcTu07QVvwYqERqD7AA8fdJp_dgoE-crAT3k1:91
行号变成 91 了,现在再点击这个链接,就可以跳转到对应格式化后的位置了,是不是超方便。。

最后一个问题,修改函数使其无效,这个最简单了,比刚才的简单多了,可是很多人不会操作所以我特地拿出来讲一下。
首先,我们知道了 推荐 这个功能调用的函数是  votePost(cb_entryId,'Digg') ,而且他是直接写是 html 上通过 onclick 绑定的。
所以这个函数是一个全局函数,到处都可以调用,那这意味着什么呢?
意味着我们可以修改啊,好比一个全局变量,你在哪都能修改对吧,那全局函数也是应该道理。
所以我们直接修改为空函数即可。
 votePost = function () {};  或者  votePost = $.noop;  都可以。$.noop 是 jQuery 为我们提供的空函数,方便我们使用。

js调试系列 源码定位与调试[基础篇]
现在 votePost 就是一个空函数,所以你点击 推荐 按钮是不会发生任何事情的。
当然刷新页面后会重新生效,我们只是在页面上调试修改而已,没有去改博客园的源码,是不可能永久生效的。
所以调试的意思就是查找与排除错误的过程,如果定位到错误源了,修改下然后测试,如果不对,刷新后重新修改,这样就不必修改实际文件而导致不可恢复了。

今天的内容差不多就这些了,其实现在很少有直接全局函数给你调试的,因为现在 jQuery 风靡,各种 click, on 之类的事件绑定,导致源码定位非常繁琐。
好在我之前写了一篇,比较详细的分析了这个问题,详情请参阅《浅谈 jQuery 事件源码定位问题》
其他框架我也不熟,所以没分析,不过思路其实是差不多的,必然都会有一个事件管理机制。

今天知识点不多,但是要自己动手巩固下,不然会秒忘的。

课后练习:
1. 分析 votePost 函数是如何实现 推荐 的。
2. 动态调试分析 votePost。(要结合断点知识)

明天要讲断点与动态调试,我也没找到合适的题目,就先凑合着做吧,如果你有合适的东西需要动态调试的,请跟帖。。

Javascript 相关文章推荐
JavaScript 闭包深入理解(closure)
May 27 Javascript
Javascript 键盘事件的组合使用实现代码
May 04 Javascript
js 遍历json返回的map内容示例代码
Oct 29 Javascript
jquery使用ajax实现微信自动回复插件
Apr 28 Javascript
js模仿php中strtotime()与date()函数实现方法
Aug 11 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
Aug 21 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
Mar 25 Javascript
深入解析JavaScript中的立即执行函数
May 21 Javascript
利用JS判断鼠标移入元素的方向
Dec 11 Javascript
js实现前端分页页码管理
Jan 06 Javascript
JS中min函数实例讲解
Feb 18 Javascript
vue实现同时设置多个倒计时
May 20 Vue.js
js调试系列 控制台命令行API使用方法
Jun 18 #Javascript
js调试系列 初识控制台
Jun 18 #Javascript
ext前台接收action传过来的json数据示例
Jun 17 #Javascript
Ext GridPanel加载完数据后进行操作示例代码
Jun 17 #Javascript
ext中store.load跟store.reload的区别示例介绍
Jun 17 #Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
Jun 17 #Javascript
javascript setinterval 的正确语法如何书写
Jun 17 #Javascript
You might like
php foreach正序倒序输出示例代码
2014/07/01 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
JavaScript禁止用户多次提交的两种方法
2016/07/24 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
清空元素html("") innerHTML="" 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
Python Mysql自动备份脚本
2008/07/14 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
2018/03/15 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
Python参数传递及收集机制原理解析
2020/06/05 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
详解python算法常用技巧与内置库
2020/10/17 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
外语系毕业生自荐信范文
2013/12/16 职场文书
企业委托书范本
2014/09/13 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
英语辞职信怎么写
2015/02/28 职场文书
社区敬老月活动总结
2015/05/07 职场文书
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python