理解Chrome JavaScript堆栈跟踪

7
我有几个关于以下javascript stacktrace的问题。
  1. 为什么stacktrace分为两部分:红色的顶部和下面的黑色部分?
  2. at angular.js:63 开始的第一行是什么意思?为什么它没有像其他行那样引用函数/方法调用 ?
  3. 它是如何排序的?底部的行是否在顶部的行之前发生?

javascript stacktrace


不是真正回答问题,但这个错误可能是因为你在某个地方调用了 $scope.$apply 引起的。 - Cerbrus
确实是这样。但我真的想了解一般情况下堆栈跟踪的结构,而不是避免这个堆栈跟踪的解决方案。无论如何,还是谢谢。 - balteo
我也想到了,所以我把它作为注释了。 - Cerbrus
http://blog.chromium.org/2011/04/chrome-developer-tools-understanding.html - James Donnelly
2个回答

3
  1. 红色部分的位是异常/错误信息,在这种情况下,似乎Angular抛出了一个异常,并且作为该异常的一部分,它已经将堆栈跟踪的内容添加到消息中,而黑色部分则是浏览器在遇到未处理的异常时产生的堆栈跟踪。
    1. 第一行指出了错误发生的位置-脚本名称和行号-如果您查看angular.js的源代码的第63行,您将看到抛出异常的语句。
    2. 如果它不是引用函数调用,那么它就是抛出异常的语句。要到达该语句的唯一方法是通过一系列函数调用,这些调用以相反的顺序显示。
  2. 正确。例如,Scope.$apply函数调用Scope.$evalScope.$eval调用名为callback的函数,等等。


谢谢phuzi。我仍然不确定点1和2...你能提供更多细节吗? - balteo
@balteo 我更新了我的回答。 - phuzi

1
Chrome使用v8引擎来处理JavaScript。因此,我引用以下链接作为答案 - https://code.google.com/p/v8-wiki/wiki/JavaScriptStackTraceApi 1. 我不确定如何回答这个问题。 2. 第一行告诉我们发生错误的位置。对于像angular这样的框架,它可能深入到框架中,不一定是用户代码。 3. 是的,它是自下而上的,即从发生错误的地方向上传递到调用者,在这种情况下是一个jQuery事件分派。

谢谢链接,Siva。 - balteo

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