网上也有很多关于调试的技巧,小编断断续续也看过不少,可能由于技术以及所遇场景有限,很多技巧看完就忘了。能记住的也就是平时经常用的一些小技巧,废话少说直接来!
1.搜索search:
首先我需要快速的定位到我需要调试的代码处,谷歌
f12
调出开发者调试工具,底部如果压根没看到底部栏
, Esc
按钮快速切换底部导航栏的显示与隐藏,如果未看到search栏
则在上图第一个箭头打开它,右侧的两个复选框
Ignore case
忽略大小写Regular expression
正则匹配
输入关键词回车后,搜索栏会以风速展示与输入的关键词匹配到的全步代码,快到没朋友!直接点击想要去的那一行代码,鼠标焦点也帮你定位到源码。如下图:
2.断点breakpoint:
打断点是调试的最重要手段,当程序出现问题,首先想到的就是跟着程序走,一步一步看程序的变化,问题到底在哪一步。
点击
A
处的任意行即可生成断点,再次点击即可清除该断点。
也可以右击进入选择栏添加和移除(麻烦)
**一个酷的功能: **Add conditional breakpoint
添加条件语句,只有当输入的条件语句为true
时才会停住。
有个坑:Blackbox script
不要点,否则断点就玩不了了。
注意:
新手会疑惑,我断点打在这了,程序执行为什么没有停在这,要知道你是页面已经加载完再打的断点还有毛用,所以你打完断点再f5
刷新页面即可,让js重新执行到你断点处即可。
对于某个还未执行的函数,比如某个响应事件可以打完断点后再去鼠标点击页面元素,然后响应该事件进入断点跟进。
快捷键:
- f10 跟进当前函数的下一行
- f11 继续跟进当前代码行调用的另一个函数
- Shift + f11 跳出当前函数回到前一个执行函数断点
- Ctrl + \ 忽略当前断点跟进直到有下一个断点继续停住
- Ctrl + f8 暂时禁用全部断点
技巧:
- 鼠标放在
B
处任意变量名上即可出现当前变量此时的值, 以及接受的参数selected_smallid
和data
,编写函数时尽量的减少全局变量,而是把数据以参数的形式传进来,这样也方便调试。 - 有时我们已经在多处添加的断点,如果一个个的去取消必须要找到它们(浪费时间),右侧
C
处即是全部断点的集合,右击可以单独移除、禁用、激活某个断点且不需要找它的位置,也可以移除全部,太方便了有木有! - 跟进断点有时候需要跳到
ToolFunc.getTargetItemData
方法内部继续跟进f11
,但是很多时候发现这个函数不是自己写的,代码太多太多,仿佛陷进深渊回不来了。那就需要跳出shift + f11
, 但有时候依然跳不出来怎么办? 那就如图在151058
处或自己想重点看的那一行打个断点,然后ctrl + \
,完美! C
那一栏还有Call Stack
也很重要,它记录着函数的调用栈,就是来到当前函数前都执行过哪些函数D
处,有些断点甚至刻意不需要知道它在哪一行,直接在Event Listener Breakpoints
栏内指定该响应的事件即可断点(主要用在别人的页面)- 打了很多断点,某一次测试想让他们不生效,但是又不能删除以免过一会儿还要一个个添加断点,这是后
Ctrl + f8
灵活的停用和激活断点非常666!
3.打印console:
打印信息是最清楚了,那些
console.info
之类的就不说了。
技巧:
- 连着上一个断点继续说,这边控制台起始就相当于进入到该断点的作用域了,比如直接在控制台
A
输入targetData
回车即可看到它的数据内容B
。打印this
也是对的,this
都给你了想干嘛请自便。 - 在
B
上右击选择Store as global variable
,随即便打印C
。顾名思义把对象的应用拷贝了一份给全局,属性名temp1
,如果继续在其它打印的对象上再来一次,则出现temp2
,以此类推! - 既然是对象的引用那么
E
可以查看对象某个属性值,甚至是修改它F
,然后继续断点跟进,这样省去了进来的数据不是想要测试的数据还必须重新来的麻烦!
结语:
暂且就说这么多,有机会再添加吧,byebye~~~!