当我发现有一个有问题的代码片段时,我应该如何进行调试?
Firebug 是此目的中最受欢迎的工具之一。
Firefox带有其自己内置的JavaScript调试工具,但我建议您安装Firebug插件。它提供了基本版本的几个附加功能,非常方便。这里我只讲述Firebug。
安装了Firebug之后,您可以像下面这样访问它:
首先,如果您右键单击任何元素,则可以使用Firebug进行检查元素:
Firebug提供了多种功能,但我们感兴趣的是脚本选项卡。点击脚本选项卡将打开此窗口:
reload
如需了解Firebug中提供的各种选项的更多信息,请查看Firebug FAQ。
Chrome还具有自己内置的JavaScript调试选项,其工作方式非常相似,右键单击,检查元素等。请查看Chrome Developer Tools。我通常发现Chrome中的stack traces比Firebug好。
如果您正在使用Visual Studio使用Web开发环境开发.NET并且使用,则可以通过放置断点等直接调试JavaScript代码。您的JavaScript代码看起来与调试C#或VB.NET代码完全相同。
如果你没有这个,Internet Explorer也提供了上述所有工具。令人恼火的是,它没有Chrome或Firefox的“右键检查元素”功能,你需要按F12来访问开发者工具。此问题涵盖了大部分要点。在JavaScript中有一个debugger关键字用于调试JavaScript代码。在您的JavaScript代码中放置debugger;片段即可自动开始调试JavaScript代码。
例如:
假设这是您的test.js文件。
function func(){
//Some stuff
debugger; //Debugging is automatically started from here
//Some stuff
}
func();
我使用古老而可靠的printf
方法(一种古老的技术,在任何时候都能很好地工作)。
看看神奇的%o
:
console.log("this is %o, event is %o, host is %s", this, e, location.host);
%o
将JS对象的内容进行漂亮打印后,呈现为可点击和深度浏览的形式。而%s
则只是用于记录。
还有这个:
console.log("%s", new Error().stack);
提供类似Java的堆栈跟踪以指向new Error()
调用点(包括文件路径和行号!!)。
%o
和new Error().stack
都可在Chrome和Firefox中使用。
拥有如此强大的工具,您可以假设JS出了什么问题,输出调试输出(别忘了将其包装在if
语句中以减少数据量),并验证您的假设。修复问题或进行新的假设或添加更多调试输出以解决问题。
同时,在堆栈跟踪中使用:
console.trace();
如下所述 控制台
愉快的黑客!
从Firebug和IE Debugger开始。
但是要注意在JavaScript中调试器。偶尔会对环境产生足够的影响,以至于导致您正在尝试调试的一些错误。
示例:
对于Internet Explorer,通常是逐渐减慢速度并且有一些内存泄漏类型的问题。大约半个小时后,我需要重新启动。它似乎相当规律。
对于Firebug,可能已经超过一年了,因此可能是旧版本。因此,我不记得具体细节,但基本上代码无法正确运行,在尝试调试了一段时间后,我禁用了Firebug,代码就可以正常工作了。
alert(msg);
在“我只是想知道发生了什么”场景中起作用......每个开发人员都遇到过这种情况:你陷入了一个(非常大或无限循环的)循环,你无法跳出来。//global flag
_debug = true;
function debug(msg){
if(_debug){
if(!confirm(msg + '\n\nPress Cancel to stop debugging.')){
_debug = false;
}
}
}
通过以上方法,你可以陷入一个弹出式调试的大循环中,按下Enter/Ok让你跳过每个消息,但按下Escape/Cancel可以优雅地退出。
Visual Studio 2008拥有非常好用的JavaScript调试工具。您可以在客户端JavaScript代码中放置断点,并使用与服务器端代码相同的工具逐步执行它。无需附加到进程或进行任何棘手的操作即可启用此功能。