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 相关文章推荐
Jquery + Ajax调用webService实例代码(asp.net)
Aug 27 Javascript
jquery浏览器滚动加载技术实现方案
Jun 03 Javascript
angular-ui-sortable实现可拖拽排序列表
Dec 28 Javascript
详解angular中如何监控dom渲染完毕
Jan 03 Javascript
js实现瀑布流效果(自动生成新的内容)
Mar 16 Javascript
jQuery实现Select下拉列表进行状态选择功能
Mar 30 jQuery
js+html5实现手机九宫格密码解锁功能
Jul 30 Javascript
AngularJS上传文件的示例代码
Nov 10 Javascript
vue通信方式EventBus的实现代码详解
Jun 10 Javascript
js实现淘宝首页的banner栏效果
Nov 26 Javascript
javascript实现简易的计算器
Jan 17 Javascript
JavaScript数组 几个常用方法总结
Nov 11 Javascript
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
博士208HAF收音机实习报告
2021/03/02 无线电
PHP聊天室技术
2006/10/09 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
常用的javascript function代码
2008/05/23 Javascript
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
Python实现简单的代理服务器
2015/07/25 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
pycharm安装和首次使用教程
2018/08/27 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
Python模拟伯努利试验和二项分布代码实例
2020/05/27 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
保送生自荐信范文
2013/10/06 职场文书
应届电子商务毕业自荐书范文
2014/02/11 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
创业计划书之面包店
2019/09/17 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫