本文目录一览:
- 1、JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
- 2、如何进行html调试和js脚本调试
- 3、有哪些 JS 调试技巧
- 4、有哪些 JS 调试技巧?
- 5、如何调试JS?
- 6、如何在网页中调试JavaScript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
浏览器开发者工具
我个人最喜欢Chrome开发者工具。虽然Safari和Firefox无法达到Chrome那么高的标准,但它们也在逐渐改善。在Firefox中,可以将Firebug和Firefox开发者工具组合使用。如果Firefox小组在改进内置开发者工具方面继续表现优异的话,Firebug有一天可能会被淘汰。
先把个人偏好放在一边,你应该能够在目标浏览器中对任意代码进行试验和调试。你的目标浏览器可能包括著名的IE8,也可能不包括。
要熟悉你自己选择的开发者工具。你还可以从IDE(集成开发环境)或者第三方软件获得额外的调试支持。
在各种调试工具中,调试的基础知识是相通的。事实上,我是在90年代从Borland的C开发者环境中学习的调试基础。断点、条件断点、监视与最新版Chrome开发者工具是完全相同的。2000年左右,我在Java中捕获到第一例异常。堆栈跟踪(Stack traces)的概念依然适用,即使JavaScript术语将其称作错误(Error),检查堆栈跟踪仍然和以前一样有用。
有些知识点是前端开发特有的。例如:
DOM检查
DOM断点
调试事件
内存泄露分析
断点
使用debugger语句可以在源代码中增加断点。一旦到达debugger语句,执行中断。当前作用域的上下文出现在控制台中,还有所有的局部变量和全局变量。将鼠标光标移到变量上可以查看变量的值。
在代码中还可以创建条件断点:
JavaScript
if (condition) { debugger;}
还可以根据自己需要在开发者工具中插入断点和条件断点。在Chrome开发者工具中,在Sources视图中点击行号即可增加断点。如果在断点上点击右键并选择“编辑断点(Edit Breakpoint)”,你还可以增加断点条件。
节点变化的断点
如果你的任务是调试垃圾代码,你可能会有这样的问题:为什么DOM节点在执行过程中发生了改变。Chrome开发者工具提供了一种方便的断点,可用来检测元素树中的节点变化。
在Elements视图中,右键点击一个元素,从右键菜单中选择“Break on…”。
节点变化的断点
DOM断点的类型可能包括:
选定节点树状子目录(sub-tree)中的节点变化,
选定节点的属性发生变化,
节点被删除。
避免记录引用类型
当记录对象或数组时,原始类型的值在引用对象记录中可能会发生变化。当查看引用类型时一定要记住,在记录和查看期间,代码执行可能会影响观测到的结果。
例如,在Chrome开发者工具中执行以下代码:
JavaScript
var wallets = [{ amount: 0 }];setInterval( function() { console.log( wallets, wallets[0], wallets[0].amount ); wallets[0].amount += 100;}, 1000 );
记录的第二个和第三个属性的值是正确的,第一个属性中对象引用的值是不可靠的。当你第一次在开发者工具中显示这个属性时,amount域的值就已经确定了。无论你对同一个引用关闭并重新打开多少次,这个值都不会变化。
记录参考类型
永远记得你在记录什么。记录原始类型时,使用带断点的watch表达式。如果是异步代码,避免记录引用类型。
表格记录
在一些开发者工具中,你可以用console.table在控制台中记录对象数组。
尝试在你的Chrome开发者工具中执行下列代码:
JavaScript
console.table( [ { id: 1, name: 'John', address: 'Bay street 1' }, { id: 2, name: 'Jack', address: 'Valley road 2.' }, { id: 3, name: 'Jim', address: 'Hill street 3.' } ] );
输出是非常好看的表格。所有原始类型都立刻显示出来,它们的值反应记录时的状态。也可以记录复杂类型,显示内容为其类型,内容无法显示。因此,console.table只能用来显示具有原始类型值的对象构成的二维数据结构。
XHR断点
有时你可能会遇到错误的AJAX请求。如果你无法立刻确认提交请求的代码,XHR断点可以帮你节省时间。当提交某一特殊类型的AJAX时,XHR断点将会终止代码的执行,并将提交请求的代码段呈现给用户。
在Chrome开发者工具的Sources标签页中,其中一个断点类型就是XHR断点。点击+图标,你可以输入URL片段,当AJAX请求的URL中出现这个URL片段时,JavaScript代码将会中断。
事件监听器断点
Chrome开发者工具可以捕获所有类型的事件,当用户按下一个键、点击一下鼠标时,可以对触发的事件进行调试。
异常时暂停
Chrome开发者工具可以在抛出异常时暂停执行JavaScript代码。这可以让你在Error对象被创建时观察应用的状态。
异常时暂停
代码片段
Sources标签页左侧面板上有一个代码片段(Snippet)子标签页,可用于保存代码片段,帮你调试代码。
如果你坚持使用控制台调试,反复写相同的代码,你应该将你的代码抽象成调试片段。这样的话,甚至还可以把你的调试技巧教给你的同事。
Paul Irish发布过一些基本的调试代码片段,例如在函数执行前插入断点。审查这些代码片段,并在网上搜索其他代码片段,这是很有价值的。
在函数执行前插入断点
如果你可以得到函数调用的源代码,你还可以在函数调用前插入断点来终止函数的执行。如果你想调试f函数,用debug(f)语句可以增加这种断点。
Unminify最小化代码
(译者注:unminify 解压缩并进行反混淆)
尽可能使用 source map。有时生产代码不能使用source map,但不管怎样,你都 不应该直接对生产代码进行调试。
(译者注:sourcemap 是针对压缩合并后的web代码进行调试的工具)
如果没有source map的话,你最后还可以求助于Chrome开发者工具Sources标签页中的格式化按钮(Pretty Print Button)。格式化按钮{}位于源代码文本区域的下方。格式化按钮对源代码进行美化,并改变行号,这使得调试代码更加方便,堆栈跟踪更加有效。
格式化按钮只有在不得已时才会使用。从某种意义上来说,丑代码就是难看,因为代码中的命名没有明确的语义。
DOM元素的控制台书签
Chrome开发者工具和Firebug都提供了书签功能,用于显示你在元素标签页(Chrome)或HTML标签页(Firebug)中最后点击的DOM元素。如果你依次选择了A元素、B元素和C元素,
$0 表示C元素
$1 表示B元素
$2 表示A元素
如果你又选择了元素D,那么$0、$1、$2和$3分别代表D、C、B和A。
访问调用栈
JavaScript
var f = function() { g(); } var g = function() { h(); }var h = function() { console.trace('trace in h'); }f();
Chrome开发者工具中的Sources标签页也在Watch表达式下面显示调用栈。
性能审查
性能审查工具通常是很有用的。这些工具可以用于防止内存泄露,还可以检测到你的网站哪里需要优化。由于这些工具并不了解你的产品,你可以忽略其某些建议。通常来说,性能分析工具能够有效范围,可以使你的网站显著优化。
审查工具举例:
Chrome开发者工具的Audit标签页
YSlow
熟能生巧
你可能熟悉某些调试技巧,其他技巧也会帮你节省不少时间。如果你开始在实践中使用这些技巧,我建议你几周之后重新阅读本文。你将会惊奇地发现,你的关注点在几周内就发生了变化。
五个常用的js调试工具
JavaScript被称作以原型(prototype)为基础的语言。这种语言有很多特色,比如动态和弱类型,它还有一等函数(first class function)。另一个特点是它是一个多范型(multi-paradigm)语言,支持面向对象、声明式、函数式的编程风格。
JavaScript最初被用作客户端语言,浏览器实现它用来提供增强的用户接口。JavaScript在很多现代的网站和Web应用程序中都有应用。JavaScript的一个很棒的功能也很重要,就是我确实可以用它来提高或改善网站的用户体验。JavaScript也可以提供丰富的功能和交互的组件。
JavaScript在这技术高速发展的同时变得非常受欢迎。因为受欢迎JavaScript也改进了许多,修改JavaScript脚本有很多事要做。这次我们为开发者带来了几个非常有用的JavaScript调试工具。
1)Drosera
可以调试任何WebKit程序,不仅仅是Safari浏览器。
2)Dragonfly
源代码视图有语法高亮,可以设置断点。强大的搜索功能,支持正则表达式。
3)Getfirebug
可以在任何网页编辑、调试和实时监视CSS、HTML和JavaScript。
4)Debugbar
5)Venkman
Venkman是Mozilla的JavaScript调试器名称。它旨在为以Mozilla为基础的浏览器(Firefox, Netscape 7.x/9.x and SeaMonkey)提供一个强大的JavaScript调试环境。
如何进行html调试和js脚本调试
工具/原料
chrome浏览器 Mozilla firefox 电脑
方法/步骤
1、以chrome为例,首先打开需要调试的页面,按F12快捷键打开调试工具。
2、选择指定的dom节点进行查看和编辑。
3、js断点调试:chrome非常强大,在chrome调试工具栏中,你可以进行js断点调试以及格式化查看(一些大型的门户网站都会将js压缩成无任何格式的代码这在研究时特别费劲):我先写一段简单的js代码:function debug(){for (var i=0;i10;i++){alert(i);}调试截图如下:
4、js ajax调试,ajax技术如今越来越频繁使用,所以,ajax调试也必不可少:在chrome调试工具中,可以查看到当前页面所以的请求,包括ajax请求,以下是页面打开后所有发起的请求。
有哪些 JS 调试技巧
seajs.cache:用Chrome访问使用Seajs的站点,打开Console,输入seajs.cache,可以看到当前加载好的模块,点开某一个,可以查看该模块的详细信息,包括该模块ID,该模块暴露的API等等信息,很常用;
seajs.find:包装好的模块的API不会污染全局变量,但在Console中,有时想用一下jQuery,这样就需要使用seajs.find了,var $ = seajs.find("jquery")[0],然后就可以在Console的上下文中使用jQuery了,PS.seajs.find返回的是一个数组;
seajs.log:在Console中打印信息,功能和console.log差不多,但是不会在IE下报错。
有哪些 JS 调试技巧?
其实当你经验足够的时候,有些错误不需要调试就能想明白。当然,新手而言,从调试做起。
主要的技巧取决于你使用的调试工具,这里以我使用的chrome为例。首先跳出chrome的调试工具,右键选择检查。。
接着弹出开发者窗口,如图
这个就是调试页面了,然后单击顶头的source,找到你的js脚本,如图:
图片中那个蓝色的小框框就是断点了,设置方法就是单击那里。
可以见到,窗口下面红色鲜红的值就是错误了,单击后面的错误位置就能定位了(语法错误能显示定位,但是逻辑错误无法定位。内置api出错定位会出错,比如JSON.parse()出错就定位到html文件去了)
左下角有一个蓝色小箭头,后面是能输入的,输入一下试试,
我输入了cookie,就返回了cookie的值。其他的同理。
另外也可以在js脚本里面使用console.log(),在console一栏会显示的。更多的方法,尝试才知道。
如何调试JS?
目前,常用的浏览器IE、Chrome、Firefox都有相应的脚本调试功能。我们先来看IE的:
1、在F12开发人员工具中进行调试
打开IE浏览器,按下F12键,就会打开开发人员工具,这是IE内置的开发人员开发工具,方便开发人员对HTML、CSS、Javascript等网页资源进行跟踪调试使用的。
如果你打开的时候没有固定在网页底部,可以点击右上角菜单栏中的按钮来完成。
我们看到在这个工具窗口里面有几个标签页,分别是:HTML、CSS、控制台、脚本、探查器和网络,点开每一个标签,可以执行相应的任务。
在HTML标签窗口中,工具栏中的按钮所执行的操作如下图:
CSS标签是用来查看样式的;控制台显示网页中JS的各种输出信息,包括错误信息、用户日志等;打开脚本标签页,这里面才是我们想要的内容。
我在图中用黄色矩形选中连个控件,左侧的下拉列表用来选择文件,右侧的按钮用来启动调试。当点击启动调试后,调试程序会将窗口最大化,我们在选中的文件中找到需要调试的位置,点击左侧边栏添加断点即可进行调试。
当有程序运行到我们的断点处时,就可以进行调试了:
在这里,我们可以使用快捷键进行操作,常用的快捷键如下:
F9:添加/移除 断点
F10:逐过程,即跳过该语句中的方法、表达式等
F11:逐语句调试,即单步调试,会跳入方法、表达式,进行逐语句的跟踪调试
在执行过程中,如果我们要执行即时的代码,我们就需要在右侧的窗格中输入代码,按回车即可:
如果要执行多行代码,点击运行按钮右侧的双箭头,就会打开多行模式。我就不再截图片了。
这种直接在浏览器中调试的方法同样适用于Google浏览器Chrome和FireFox FireDebug,只不过在细枝末叶上面有些不同罢了,主体的功能都是一样的。
按F12键进入开发者工具,可以查看源代码、样式和js:
点击Scripts按钮,可以打开这个调试窗口,里面包含了网页中脚本文件源码,点击左侧的按钮可以打开选择文件的侧窗口。
2、使用debugger关键字进行调试
这种方法很简单,我们只需要在进行调试的地方加入debugger关键字,然后当浏览器运行到这个关键字的时候,就会中断:
设置以后就可以使用debugger关键字进行调试了;进过这样的设置,我们还可以捕获到意外的错误,进行跟踪调试。
如何在网页中调试JavaScript
以IE8浏览器为例,接下来重点介绍并演示如何使用浏览器自带的开发人员工具调试JS程序。(该工具快捷按钮为F12)
1、在工具-Internet选项-高级,去掉“禁用脚步调试(Internet Explorer)”项的勾选。
2、去掉“显示友好http错误信息”项的勾选。最后点击应用,确定按钮。
3、预览表单,当要执行的js程序出现错误时,浏览器会给出提示。
4、在给出的错误提示窗口中,选择“是(Y)”按钮,进入IE浏览器自带的开发人员工具脚本调试界面。
5、根据JS调试信息可以知道,当前JS报错是由于没有找到指定对象“dat”而导致的。我们需要在表单设计器中,修改JS程序并保存。因演示效果的需要,在本例中是没有设置id值为dat的单行输入框控件的,本例中第二个单行输入框控件的id值是data2。修改后的JS代码。
6、将其改成值data2后,再进行测试不会出现JS报错信息,程序得以正常执行。
7、本例只是演示了如何利用IE自带的开发人员工具进行简单的调试工作,如需了解其他调试及排查技巧,请参阅网络及相关书籍进行学习。