调试Javascript代码

5
什么是调试JavaScript的最佳方法?我目前正在使用带有最新Firebug的Firefox 4。我喜欢Firebug,DOM和调试控制很好。不幸的是,它并不总是报告错误。我的JavaScript应用程序会停止工作(崩溃),而控制台 -> 错误(或全部)选项卡为空白。因此,我必须通过调试器,设置断点并逐步执行代码。有时候逐步执行代码并不像你想象的那样直观(偶尔会跳转到jQuery代码或其他库中)。这可能很痛苦。
我总是修复错误,但希望有更快的方法。及时了解错误会让我的工作更加快速...
是否有比Firebug更好的工具?是否需要为Firebug设置以始终报告错误?我应该使用不同的浏览器进行调试吗?

1
好问题 - 我也遇到了这个问题。我从未为解决方案进行过研究,但我也很烦恼Firebug / Firefox不报告在异步调用(回调)中发生的Javascript错误。我总是在回调中设置多个断点,并通过排除法找出哪个部分出现了问题。 - Hari Gangadharan
@Hari 真的吗?我的firebug确实会报告异步调用中的错误。也许你不小心把它关掉了? - Benubird
不仅在异步调用时会出现问题,有时对未定义变量类型调用函数也不会报异常。 - at.
我在不同的地方、不同的版本和不同的计算机上使用Firebug时遇到了类似的问题。出于某种原因,它经常不会抛出有用的异常,而是直接崩溃...最糟糕的是,通常你甚至都没有意识到。 - nicodemus13
7个回答

2

你应该尝试使用Chrome的开发者工具,这是我一直在使用的工具。它包括DOM检查器、本地数据库资源跟踪、cookie等网络活动、js调试器、时间轴、性能分析和审计功能。我认为这个工具非常好用。


1
Chrome 正确地报告了我所有的错误!!谢谢。我会想念我心爱的 Firebug... - at.

1
最近,我在使用IE开发工具方面取得了很大的成功。它们内置的Javascript调试器允许您设置断点,就像在Visual Studio中一样,并且可以很容易地逐步执行它们,还显示一个“立即”窗口。
对于微软来说相当不错;)

IE9的调试工具比Firebug更方便、更好,尽管实现中仍然存在许多错误。 - nicodemus13

0

我在使用Firebug时取得了巨大的成功,但也遇到了一些成长烦恼。

JavaScript是一种允许出现一些隐式错误的语言。jQuery也可能使调试变得困难。

有时我会让我的JavaScript更加冗长,直到它能够正常工作。逐行设置调试点并运行到下一个调试点,调试jQuery是无用的。同时,利用console.log()检查JS中的值非常有帮助。

简洁 - 难以调试:

    function doSomething(cost, sale, myArray, span) {
      var id = $(span).attr("id");
      var isProfit = sale > cost;
      return isProfit ? myArray[id] : isNew;'
    }

扩展 - 更易于调试

function doSomething(cost, sale, myArray, span) {
  console.log("cost: " + cost);
  console.log("sale: " + sale);
  console.log("span: " + span); 

  debugger;
  var id = $(span).attr("id");

  debugger;
  var isProfit = sale > cost;

  debugger;
  var arrayVal = myArray[id];

  return isProfit ? arrayVal  : isNew;'
}

Firebug有时候并不能报告所有的错误,代码分散开来也没有帮助。 - at.

0

你应该考虑启用开发菜单,尝试使用Safari浏览器。我也很喜欢Firebug,但有时它并不是最适合的工具。

Safari浏览器拥有调试器和分析器,可能会对你有所帮助。


0

在我看来,Firebug仍然是迄今为止用于调试JavaScript的最好工具(尽管我必须承认Webkit的Web检查器正在赶上它)。

如果您因刷新或其他操作而烦恼控制台选项卡为空白,请在控制台选项卡中单击“持续”。

这将不会删除您抛出到控制台的任何日志。

另外,我不确定您所说的“它并不总是报告错误”的意思。您记录到控制台的所有错误都将显示出来。但选择将这些日志语句放入代码中则由您决定。

您还可以打开ES5中提供的“严格模式”,它将通过警告和静默错误进一步提示您。

编辑:

此外,我强烈建议您使用JSLint运行代码。这也将帮助解决一些问题。


“persist”并不能解决缺失错误问题。我所指的错误是像在a未定义时调用a.b这样的错误。有时它们会显示在Firebug控制台中,有时JavaScript会突然停止运行,你必须找出原因...也许只是我的Firebug有问题?虽然这种情况在早期版本、FF3.6和FF4中都发生过。 - at.
你可以使用“try-catch”来处理编程中的错误。在catch中,这些错误可以被输出到控制台。但是请谨慎使用try-catch。它们会创建自己的本地作用域并扩展作用域链。即使在“try-catch”之外定义了局部变量,也需要多一步才能访问。另外,如果您不想为此更改代码,JSLint似乎是一个不错的选择。 - Rajat
可能会起作用,但Chrome的表现就像你所期望的那样。总的来说,Chrome似乎比Firebug拥有更优秀的JavaScript调试器。 - at.

0

JavaScript并不是最容易调试的语言,这一点毋庸置疑。但我认为Firebug是其中一个更好的调试工具。听起来你遇到了一些奇怪的错误。但当你在调试时,你可以使用“跳出”和“跳过”按钮来跳过调试jQuery函数,如果你想的话。这应该能帮助你更快地找到问题。


0
你得到的错误信息(当代码停止执行时没有出现错误)类似于JavaScript中的分段错误,它发生在脚本尝试执行不可能完成的任务时,浏览器需要介入并停止它。你不会收到错误消息,因为它并没有引起错误——它正在执行应该是完全合法的操作,但在这种情况下却不是,例如访问空指针。唯一调试的方法是逐行检查代码。然而,其他具有明显不同JavaScript实现的浏览器,在此发生时可能会产生错误,您可以检测到。虽然我不想说,但Internet Explorer在这方面偶尔对我有帮助,因为它会报告一些Firefox无法处理的错误。
总之:尝试使用不同的浏览器,如果还不起作用,你就没办法了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接