Chrome的JS调试工具

你是怎么调试 JavaScript 程序的?最原始的方法是用 alert() 在页面上打印内容,稍微改进一点的方法是用 console.log() 在 JavaScript 控制台上输出内容。嗯~,用这两种土办法确实解决了很多小型 JavaScript 脚本的调试问题。不过放着 Chrome 中功能越发强大的开发者工具不用实在太可惜了。本文主要介绍其中的 JavaScript 断点设置和调试功能,也就是其中的 Sources Panel(以前叫 Scripts)。如果你精通 Eclipse 中的各种 Java 调试技巧,那么这里的概念都是类似。写作本文时使用的 Chrome 版本为 25.0.1364.172。
基本环境
<ignore_js_op> 
Sources Panel 的左边是内容源,包括页面中的各种资源。其中,又分 Sources 和 Content scripts。Sources 就是页面本身包含的各种资源,它是按照页面中出现的域来组织的,这是我们要关注的。异步加载的 js 文件,在加载后也会出现在这里的。Content scripts 是 Chrome 的一种扩展程序,它是按照扩展的ID来组织的,这类扩展实际也是嵌入在页面中的资源,它们也可以读写DOM。编写、调试这类扩展的开发者才要关心它们,如果你的浏览器没安装任何扩展,那么 Content scripts 就看不到任何东西。

Sources Panel 的中间主区域用于展示左边资源文件的内容。

Sources Panel 的右边是调试功能区,最上面的一排按钮分别是暂停/继续、单步执行、单步跳入、单步跳出、禁用/启用所有断点。下面是各种具体的功能区。稍后介绍。

注意,左右两边的区域默认可能收缩在两侧没有显示出来,点击两侧的伸缩按钮 <ignore_js_op> <ignore_js_op> 展示出来。左边区域展示出来时默认是自动收缩状态,点击旁边的 pin 按钮 <ignore_js_op> 就不会缩回去了。

最下面还有一些功能按钮很有用。

在源代码上设置断点
通过左边的内容源,打开对应的 JavaScript 文件,鼠标点击文件的行号就可以设置和删除断点。添加的每个断点都会出现在右侧调试区的 Breakpoints 列表中,点击列表中断点就会定位到内容区的断点上。如果你有多个文件、多个断点的话,利用 Breakpoints 列表中的断点快速定位非常方便。
<ignore_js_op> 
对于每个已添加的断点都有两种状态:激活和禁用。刚添加的断点都是激活状态,禁用状态就是保留断点但临时取消该断点功能。在 Breakpoints 列表中每个断点前面都有一个复选框,取消选中就将禁用该断点。断点位置的右键菜单中也可以禁用断点。也可以在右侧功能区上面 <ignore_js_op> 按钮临时禁用所有已添加的断点,再点一下恢复原状态。

条件断点:在断点位置的右键菜单中选择“Edit Breakpoint...”可以设置触发断点的条件,就是写一个表达式,表达式为 true 时才触发断点。

查看断点的环境
调用栈(Call Stack):在断点停下来时,右侧调试区的 Call Stack 会显示当前断点所处的方法调用栈,比如有一个函数 g() 其中又调用了函数 f() ,而我在 f() 中设置了一个断点,那么我在 console 中执行函数 g() 的时候会触发断点,其调用栈显示如下:
<ignore_js_op> 
最上面是 f(),然后是 g()。调用栈中的每一层叫做一个 frame,点击每个 frame 可以跳到该 frame 的调用点上。
<ignore_js_op> 
此外,还可以在 frame 上用右键菜单重新开始执行当前 frame,也就是从该 frame 的开始处执行。比如在函数 f() 的 frame 上 Restart Frame, 断点就会跳到 f() 的开头重新执行,context 中的变量值也会还原。这样结合变量修改和编辑代码等功能,就可以在当前 frame 中反复进行调试,而不用刷新页面重新触发断点了。

查看变量
<ignore_js_op> 
Call Stack 列表的下方是 Scope Variables 列表,在这里可以查看此时局部变量和全局变量的值。

执行选择的代码
<ignore_js_op> 
在断点调试时,可以用鼠标选择想要查看的变量或表达式,然后右键菜单执行“Evaluate in Console”,就可以看到该表达式的当前的值了。

中断下次要执行的 JavaScript 语句
右侧调试区的上面的“中断/继续”按钮还有一个功能,在没有触发断点时,点一下这个按钮就会进入“准备”中断的状态,页面下一次执行 JavaScript 语句时会自动中断,比如触发了一个点击动作时会执行的代码。

临时修改 JavaScript 代码
通常我们在调试代码时习惯:修改代码→刷新页面→重新检查,这么一个循环。但其实 Chrome 中可以临时修改 JS 文件中的内容,保存(Ctrl+S)就可以立即生效,结合 Console 等功能就可以立即重新调试了。但注意这个修改是临时的,刷新页面修改就没了。

异常时断点
在界面下方能看到 <ignore_js_op> 按钮,它是设置程序运行时遇到异常时是否中断的开关。点击该按钮会在3种状态间切换:

  • 默认遇到异常不中断
  • <ignore_js_op>  遇到所有异常都会中断,包括已捕获的情况
  • <ignore_js_op>  仅在出现未捕获的异常时才中断

主要解释一下状态2和状态3的区别

  1. try{
  2. throw ‘a exception‘;
  3. }catch(e){
  4. console.log(e);
  5. }

复制代码

上面 try 里面的代码会遇到异常,但是后面的 catch 代码能够捕获该异常。如果是所有异常都中断,那么代码执行到会产生异常的 throw 语句时就会自动中断;而如果是仅遇到未捕获异常才中断,那么这里就不会中断。一般我们会更关心遇到未捕获异常的情况。

在 DOM 元素上设置断点
有时候我们需要监听某个 DOM 被修改情况,而不关心是哪行代码做的修改(也可能有多处都会对其做修改)。那么我们可以直接在 DOM 上设置断点。
<ignore_js_op> 
如图所见,在元素审查的 Elements Panel 中在某个元素上右键菜单里可以设置三种不同情况的断点:

  • 子节点修改
  • 自身属性修改
  • 自身节点被删除

选中之后,Sources Panel 中右侧的 DOM Breakpoints 列表中就会出现该 DOM 断点。一旦执行到要对该 DOM 做相应修改时,代码就会在那里停下来,如下图所示。

<ignore_js_op>

XHR 断点
右侧调试区有一个 XHR Breakpoints,点击+ 并输入 URL 包含的字符串即可监听该 URL 的 Ajax 请求,输入内容就相当于 URL 的过滤器。如果什么都不填,那么就监听所有 XHR 请求。一旦 XHR 调用触发时就会在 request.send() 的地方中断。

按事件类型触发断点
右侧调试区的 Event Listener 列表,这里列出了各种可能的事件类型。勾选对应的事件类型,当触发了该类型的事件的 JavaScript 代码时就会自动中断。

调试快捷键
<ignore_js_op> 
所有开发工具中的快捷键都可以在界面右下角的设置中查到。断点调试时一般用的是 F8、F10、F11或 Shitf+F11,但在 Mac OS 上 F10 等功能键可能与系统默认的快捷键冲突。没关系,它们分别可以用 Cmd+/ 、Cmd+‘、Cmd+; 、Shift+Cmd+; 代替。

//@ sourceURL 给 eval 出来的代码命名
有时候一些非常动态的代码是以字符串的形式通过 eval() 函数在当前 Javascript context 中创建出来,而不是作为一个独立的 js 文件加载的。这样你在左边的内容区就找不到这个文件,因此很难调试。其实我们只要在 eval 创建的代码末尾添加一行 “//@ sourceURL=name“ 就可以给这段代码命名(浏览器会特殊对待这种特殊形式的注释),这样它就会出现在左侧的内容区了,就好像你加载了一个指定名字的 js 文件一样,可以设置断点和调试了。下图中,我们通过 eval 执行了一段代码,并利用 sourceURL 将它命名为 dynamicScript.js ,执行后左侧内容区就出现了这个“文件”,而它的内容就是 eval 的中的内容。

<ignore_js_op>

还可以看看这个给动态编译出来的 CoffeeScript 代码命名的示例

  1. var coffee = CoffeeScript.compile(code.value)+ "//@ sourceURL=" + (evalName.value || "Coffeeeeeeee!");
  2. eval(coffee);

复制代码

实际上,//@ sourceURL 不仅仅可以用在 eval 的代码中,任何 js 文件、甚至是 Javascript Console 输入的代码都可以用,效果一样!

格式化代码(Pretty Print)
<ignore_js_op> 按钮用于把杂乱的代码重新格式化为漂亮的代码,比如一些已被压缩的 js 文件基本没法看、更没法调试。点一下格式化,再点一下就取消格式化。
<ignore_js_op> 
美化前
<ignore_js_op>

2013-3-15 01:35 上传

下载附件 (41.86 KB)

=====================================================================

调戏代码(当脚本没有达到预期效果时,就可以通过console.log(变量名)在控制台输出信息啦)

var colors = new Array();
var count=colors.push("red","green");
count=colors.push("black");
//var item=colors.pop();
var item=colors.shift();
count=colors.length;
console.log(count);//在控制台输出count
console.log(item);//在控制台输出item

使用调试方式Sources

还可以利用Chrome来查看函数内容
比如我们想知道在jquery中,delegate方法和bind方法有什么区别

出处:http://www.cnblogs.com/duerbin/archive/2013/06/14/3135738.html

http://blog.163.com/[email protected]/blog/static/16463746720131571654232/

Chrome的JS调试工具

时间: 2024-10-24 16:29:06

Chrome的JS调试工具的相关文章

Chrome新版JS调试工具

很多前端开发工程师都对Chrome浏览器情有独钟.原因很简单:一来她启动速度快,执行效率高,给网页浏览带来流畅和快感:二来她实现了很多新的标准,支持很多高级属性,让网页体验更好,更高大上:三来就不得不提一下她的调试工具了,对于前端开发工程师更是无异于左右手.然而,大概是因为强迫症得问题,我今天却遇到一个让我有点接受不了的功能- 由于,我的Chrome开启自动升级功能.所以我的Chrome总是最新的,下图是我目前的Chrome浏览器版本: 而最近我在进行代码调试的时候,发现她的调试工具中多了一些东

Google Chrome 调试JS简单教程[更新]

题外话,刚开始我写这篇内容只是将自己了解的一些知识放上来,不巧的是我分析了我的来访日志,很多朋友都有这个需求,为了大家没有白来,我决定充实下这篇文章.最近更新时间2014-02-14 chrome版本: 32.0.1700.107 m 我是一名忠实Chrome迷,使用它已经快有2年的历史了,整体给我的感觉就是清爽,快速,简洁.又打小广告了……^_^,虽然我知道IE8+也有调试工具,包括火狐的什么XXBUG,但是我用过之后,个人还是十分偏爱chrome的debug. chrome对于在前端打拼的兄

chrome禁用JS

有一些网站不允许文本选择,对于我这种伸手党实在是很不友好.当然像这类的功能,应该是用JS来控制. chrome的话,JS禁用可以在地址栏旁边的一个下拉列表那里选. chrome禁用JS,布布扣,bubuko.com

常用JS调试工具使用方法,帮你快速定位问题(Firebug+ IE“开发人员工具”)

来源: 这里花了点时间小结了下目前项目中比较合适易于上手的JS调试工具.方法.优点与不足以及一些调试相关功能要点或策略,分享给同学们,只当抛砖引玉了,欢迎大家讨论补充. 一.Firebug:如果项目可以支持Firefox,我依然首推Firebug作为JS调试首选,虽然有些不足之处,但基本可以满足大家90%调试场景需求. A. 功能讲解 见上图,图中已标注出功能的五个关键点,下面顺序说明,先将Firebug切换到标注1中的JS调试功能Tab“脚本”上:打开标注2中的当前页面加载的所有静态JS链接资

chrome调试js方法

版本:40.0.2214.94 m 首先按ctrl+shift+j,出现调试界面. 点击sources,看见js的源代码: 点击行号,你想断点的位置: 点击界面,会进入断点,F10是下一行,或者右侧的向下/向上箭头按钮: 点击+号,可以增加变量,查看变量的值(其实用鼠标扫一下变量,把鼠标放在上面也能看). chrome的js调试非常好用!免掉了我以前alert来调试的坏习惯,快速解决了很多问题,个人感觉比ie的调试好用. 2015.3.3

CefSharp中实现Chrome中jS导出Excel

[前言] 在博客园闲逛了一年多,平时都是借鉴别人的成功经验,总觉得自己应该分享点什么,但是苦于自己技术有限,平时又不爱写东西,所以一直没有写过任何东西.毕业一年多,在现实工作中遇到各种问题,深切体会到遇到问题时的焦急与纠结.今天决定写自己的第一篇现实中遇到的问题.希望能够为遇到类似问题的博友们提供一些帮助.文章可能写的不好,请勿喷!! [背景] 使用JS将<table>数据以Excel形式已经不是新鲜事情,在IE中常常使用ActiveXObject来创建Excel.application对象来

js调试工具及微博登录分析

js调试工具 网页 都是采用ajax  需要提交一些参数 断点 自己去直接断点 事件断点, network 方法 靠近边栏顶部的是Call Stack(调用堆栈)窗格.当代码在断点处暂停时,Call Stack(调用堆栈)窗格显示执行路径,按时间逆序,将代码带到该断点.这有助于理解现在执行到哪里,它是如何到达这里的,是调试的一个重要因素. 微博模拟登陆 1,发送请求获取pubkey等参数 2,发送登陆的请求 3, 第一步:抓包,分析请求是为了知道需要提交哪些参数,哪些参数是需要去找的,固定的参数

chrome 控制台js调试与断点调试

这篇文章是根据目前 chrome 稳定版(19.0.1084.52 m)写的,因为 google 也在不断完善chrome developer tool,所以 chrome 版本不同可能稍有差别. 一些快捷键也是 windows 上的,mac 下的应该大同小异. 常规的断点相关的 breakpoint/conditional-breakpoint/call-stack/watch-expressions 等就不涉及了. 1. Beautify Javascript js 文件在上线前一般都会压缩

Google Chrome调试js入门

1 我们要调的json数据见下图,这里不涉及和后台的交互. 2 我们在chrome中打开开发者工具,打开方式如下图,我们也可以使用快捷键F12来打开.选择我们要调试的文件,相信你能找到,^_^. 3 设置断点的设置,我在11行设置了断点,设置方法左侧点击即可,我太喜欢这个断点了,看起来真漂亮.刷新一下页面,执行如下图: 4 在向下执行之前,我们直接输入json(我们的对象名),看看对象结构,可以非常清晰的看到json到底是个什么东西,不用太多的解释,如下图: 5 按F10向下执行,我们依次输入我