【发布时间】:2010-11-02 13:37:39
【问题描述】:
当我发现我有一个有问题的代码sn-p时,我应该如何去调试它?
【问题讨论】:
标签: javascript debugging
当我发现我有一个有问题的代码sn-p时,我应该如何去调试它?
【问题讨论】:
标签: javascript debugging
Firebug 是用于此目的的最受欢迎的工具之一。
【讨论】:
所有现代浏览器都带有某种形式的内置 JavaScript 调试应用程序。这些细节将在相关技术网页上介绍。我个人对调试 JavaScript 的偏好是 Firefox 中的 Firebug。我并不是说 Firebug 比其他任何产品都好。这取决于您的个人偏好,无论如何您都应该在所有浏览器中测试您的网站(我个人的首选始终是 Firebug)。
我将在下面介绍一些高级解决方案,以 Firebug 为例:
Firefox 自带内置的 JavaScript 调试工具,但我建议您安装 Firebug 插件。这提供了一些基于方便的基本版本的附加功能。我这里只谈 Firebug。
安装 Firebug 后,您可以按如下方式访问它:
首先,如果您右键单击任何元素,您可以使用 Firebug 检查元素:
单击此按钮将打开浏览器底部的 Firebug 窗格:
Firebug 提供了多种功能,但我们感兴趣的是脚本选项卡。单击脚本选项卡会打开此窗口:
很明显,要调试你需要点击reload:
您现在可以通过单击要添加断点的 JavaScript 代码左侧的行来添加 breakpoints:
当你的断点被命中时,它将如下所示:
您还可以添加watch variables,并且通常会执行您在现代调试工具中所期望的一切。
有关 Firebug 中提供的各种选项的更多信息,请查看Firebug FAQ。
Chrome 也有自己的内置 JavaScript 调试选项,其工作方式非常相似,右键单击、检查元素等。看看Chrome Developer Tools。我通常发现 Chrome 中的 stack traces 比 Firebug 更好。
如果您在 .NET 中进行开发并使用 Web 开发环境使用 Visual Studio,您可以通过放置断点等直接调试 JavaScript 代码。您的 JavaScript 代码看起来与调试 C# 或 @987654329 完全相同@代码。
如果您没有这个,Internet Explorer 还提供了上面显示的所有工具。烦人的是,您没有使用 Chrome 或 Firefox 的 右键检查元素 功能,而是通过按 F12 访问开发者工具。 This question 涵盖了大部分内容。
【讨论】:
【讨论】:
在 JavaScript 中有一个 debugger 关键字来调试 JavaScript 代码。将 debugger; sn-p 放入您的 JavaScript 代码中。它将在此时自动开始调试 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 调试器开始。
不过,请小心使用 JavaScript 中的调试器。每隔一段时间,它们就会影响环境,足以导致您尝试调试的一些错误。
例子:
对于 Internet Explorer,它通常是逐渐变慢的,并且是某种内存泄漏类型的交易。半小时左右后,我需要重新启动。看起来很规律。
对于 Firebug,它可能已经有一年多了,所以它可能是一个旧版本。结果,我不记得具体细节了,但基本上代码运行不正确,在尝试调试了一段时间后,我禁用了 Firebug,代码运行良好。
【讨论】:
虽然alert(msg); 在那些“我只是想知道发生了什么事”的场景中工作...... 每个开发人员都遇到过这样的情况,你最终会陷入(非常大或无穷无尽)无法摆脱的循环。
我建议在开发过程中,如果您想要一个非常直观的调试选项,请使用可以让您突破的调试选项。 (PS Opera、Safari?和 Chrome?都在其原生对话框中提供此功能)
//global flag
_debug = true;
function debug(msg){
if(_debug){
if(!confirm(msg + '\n\nPress Cancel to stop debugging.')){
_debug = false;
}
}
}
通过以上操作,您可以让自己进入一个弹出调试的大循环,其中按 Enter/Ok 可以让您跳过每条消息,但按 Escape/Cancel 让你很好地爆发。
【讨论】:
我使用WebKit's 开发者菜单/控制台(Safari 4)。它几乎与 Firebug 相同。
console.log() 是新的黑色——远胜于alert()。
【讨论】:
Visual Studio 2008 有一些非常好的 JavaScript 调试工具。您可以在客户端 JavaScript 代码中放置一个断点,并使用与服务器端代码完全相同的工具逐步执行它。无需附加到进程或做任何棘手的事情来启用它。
【讨论】:
我使用了一些工具:Fiddler、Firebug 和 Visual Studio。我听说 Internet Explorer 8 有一个很好的内置调试器。
【讨论】:
我曾经使用Firebug,直到 Internet Explorer 8 出现。我不是 Internet Explorer 的忠实拥护者,但在使用了一些内置开发人员工具(其中包括一个非常好的调试器)之后,使用其他任何东西似乎毫无意义。我不得不向微软致敬,他们在这个工具上做得非常出色。
【讨论】:
您也可以查看YUI Logger。使用它所要做的就是在 HTML 中包含几个标签。它是对 Firebug 的有益补充,或多或少是必须的。
【讨论】:
我发现新版本的 Internet Explorer 8(按 F12)非常适合调试 JavaScript 代码。
当然,如果您使用 Firefox,Firebug 也不错。
【讨论】:
除了使用 Visual Studio 的 JavaScript 调试器之外,我还编写了自己的简单面板,并将其包含在页面中。它就像 Visual Studio 的Immediate window。我可以更改变量的值、调用函数并查看变量的值。它只是评估文本字段中编写的代码。
【讨论】:
除了 Firebug 和浏览器原生开发者扩展外,JetBrains WebStorm IDE 还内置了 remote debug support for Firefox and Chrome(需要扩展)。
还支持:
免费测试的选项是 30 试用版或使用 Early Access Version。
【讨论】:
如果您使用Visual Studio,只需将debugger; 放在您要调试的代码上方即可。在执行过程中,控件会在那个地方暂停,你可以从那里一步步调试。
【讨论】:
与大多数答案一样,这实际上取决于:您想通过调试实现什么目标?基础开发,修复性能问题?对于基础开发,前面的所有答案都绰绰有余。
对于性能测试,我推荐 Firebug。对于我从事的许多项目而言,能够描述哪些方法在时间上最昂贵是非常宝贵的。随着客户端库变得越来越健壮,并且通常将更多的责任放在客户端,这种类型的调试和分析只会变得更加有用。
Firebug 控制台 API: http://getfirebug.com/console.html
【讨论】:
通过按F12,Web 开发人员可以在不离开浏览器的情况下快速调试 JavaScript 代码。它内置于每个 Windows 安装中。
在Internet Explorer 11中,F12工具提供了断点、监视和局部变量查看等调试工具,以及一个控制台 用于消息和立即执行代码。
【讨论】: