调试Javascript代码

| 调试JavaScript的最佳方法是什么?我目前正在使用带有最新Firebug的Firefox 4。我喜欢Firebug,DOM,并且调试控件很好。不幸的是,它并不总是报告错误。我的JavaScript应用将停止运行(崩溃),并且控制台->错误(或全部)选项卡将为空白。因此,然后我必须通过调试器,设置断点并逐步执行代码。有时候,单步执行代码并不像您想象的那样直观(有时会跳转到jQuery代码或其他库)。可能会很痛苦。 我总是会修复这些错误,只是希望有一种更快的方法。在错误发生时得到通知会使我的工作进行得更快。 有没有比Firebug更好的工具?我需要Firebug始终报告错误的设置吗?我应该使用其他浏览器进行调试吗?     
已邀请:
您应该尝试使用Chrome \的开发人员工具,这是我一直使用的工具。 DOM检查器,使用本地数据库跟踪资源,Cookie等。网络活动,js调试器,时间表,配置文件,审核。我认为这真的非常好。     
最近,我在IE开发工具方面取得了很多成功。它们内置在Javascript调试器中,使您可以像在Visual Studio中一样设置断点,并轻松地逐步处理它们,并且还显示“立即”窗口。 对微软来说很好;)     
您应该考虑在启用“开发”菜单的情况下尝试使用Safari。我也喜欢Firebug,但有时它不是完成这项工作的正确工具。 它具有调试器和分析器,它可能会帮助您。     
在我看来,Firebug仍然是迄今为止调试JavaScript的最佳工具(尽管我必须承认webkit中的Web Inspector正在赶上来)。 如果您对“控制台”选项卡为空白感到烦恼(由于刷新或其他操作),则可以在“控制台”选项卡中单击\“ persist \”。 这不会删除您扔到控制台的任何日志。 另外,我不确定您的意思是“它并不总是报告错误”。您登录到控制台的所有错误都会显示。但是,由您自己决定将那些日志语句放入代码中。 您还可以打开ES5中提供的“严格模式”,该警告会进一步警告和提示无提示错误。 编辑: 另外,我强烈建议您通过JSLint运行您的代码。这也将有助于解决一些问题。     
可以肯定,JavaScript不是最容易调试的语言。但是我认为Firebug是更好的调试工具之一。听起来您遇到了一些奇怪的错误。但是在调试时,如果需要,可以使用\“ Step Out \”和\“ Step Over \”按钮跳过调试jQuery函数。这应该可以帮助您更快地找到问题。     
您得到的错误(当代码停止执行且没有错误时)类似于segfault的javascript,它会在您的脚本尝试执行无法完成的操作时发生,并且浏览器必须介入并停止它。您不会收到错误消息,因为它不会引起错误-它所做的事情应该是完全合法的,但在这种情况下不是-例如访问空指针。调试此错误的唯一方法是逐行浏览代码。但是,当您可以检测到此错误时,其他具有javascript不同实现的浏览器可能会产生错误。尽管我讨厌这样说,但是Internet Explorer在这方面偶尔对我有用,因为它确实报告了许多Firefox死于的错误。 总结:尝试使用其他浏览器,如果该浏览器不起作用,则说明您不走运。     
我在Firebug方面取得了巨大的成功,并且经历了一些成长的烦恼。 JavaScript是一种允许某些无提示故障的语言。 jQuery也可能使调试变得痛苦。 有时,我会变得更加冗长,直到我能正常工作为止。并且逐行调试点,然后运行到下一个调试点,调试到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;\'
}
    

要回复问题请先登录注册