angularjs - 追踪无限摘要错误

标签 angularjs

我们最近部署了一个相当大的 angularjs 应用程序,其中包括记录客户端浏览器中发生的错误的功能。自从我们两周前部署以来,我们似乎无法追踪正在发生的无限摘要错误。

错误信息

[$rootScope:infdig] http://errors.angularjs.org/1.2.7/$rootScope/infdig?p0=10&p1=[["fn: function (){e=h(c);var a,b;if(X(e))if(qb(e))for(d!==\nm&&(d=m,l=d.length=0,f++),a=e.length,l!==a&&(f++,d.length=l=a),b=0;b<a;b++)d[b]!==e[b]&&(f++,d[b]=e[b]);else{d!==k&&(d=k={},l=0,f++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,d.hasOwnProperty(b)?d[b]!==e[b]&&(f++,d[b]=e[b]):(l++,d[b]=e[b],f++));if(l>a)for(b in f++,d)d.hasOwnProperty(b)&&!e.hasOwnProperty(b)&&(l--,delete d[b])}else d!==e&&(d=e,f++);return f}; newVal: 418; oldVal: 410","$index; newVal: 28; oldVal: 29","$index; newVal: 29; oldVal: 28","$index; newVal: 70; oldVal: 69","$index; newVal: 69; oldVal: 70","$index; newVal: 78; oldVal: 79","$index; newVal: 79; oldVal: 78","$index; newVal: 94; oldVal: 95","$index; newVal: 95; oldVal: 94"],["fn: function (){e=h(c);var a,b;if(X(e))if(qb(e))for(d!==\nm&&(d=m,l=d.length=0,f++),a=e.length,l!==a&&(f++,d.length=l=a),b=0;b<a;b++)d[b]!==e[b]&&(f++,d[b]=e[b]);else{d!==k&&(d=k={},l=0,f++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,d.hasOwnProperty(b)?d[b]!==e[b]&&(f++,d[b]=e[b]):(l++,d[b]=e[b],f++));if(l>a)for(b in f++,d)d.hasOwnProperty(b)&&!e.hasOwnProperty(b)&&(l--,delete d[b])}else d!==e&&(d=e,f++);return f}; newVal: 426; oldVal: 418","$index; newVal: 24; oldVal: 23","$index; newVal: 23; oldVal: 24","$index; newVal: 29; oldVal: 28","$index; newVal: 28; oldVal: 29","$index; newVal: 53; oldVal: 52","$index; newVal: 52; oldVal: 53","$index; newVal: 69; oldVal: 70","$index; newVal: 70; oldVal: 69"],["fn: function (){e=h(c);var a,b;if(X(e))if(qb(e))for(d!==\nm&&(d=m,l=d.length=0,f++),a=e.length,l!==a&&(f++,d.length=l=a),b=0;b<a;b++)d[b]!==e[b]&&(f++,d[b]=e[b]);else{d!==k&&(d=k={},l=0,f++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,d.hasOwnProperty(b)?d[b]!==e[b]&&(f++,d[b]=e[b]):(l++,d[b]=e[b],f++));if(l>a)for(b in f++,d)d.hasOwnProperty(b)&&!e.hasOwnProperty(b)&&(l--,delete d[b])}else d!==e&&(d=e,f++);return f}; newVal: 436; oldVal: 426","$index; newVal: 23; oldVal: 24","$index; newVal: 24; oldVal: 23","$index; newVal: 28; oldVal: 29","$index; newVal: 29; oldVal: 28","$index; newVal: 33; oldVal: 32","$index; newVal: 32; oldVal: 33","$index; newVal: 70; oldVal: 69","$index; newVal: 69; oldVal: 70","$index; newVal: 89; oldVal: 88","$index; newVal: 88; oldVal: 89"],["fn: function (){e=h(c);var a,b;if(X(e))if(qb(e))for(d!==\nm&&(d=m,l=d.length=0,f++),a=e.length,l!==a&&(f++,d.length=l=a),b=0;b<a;b++)d[b]!==e[b]&&(f++,d[b]=e[b]);else{d!==k&&(d=k={},l=0,f++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,d.hasOwnProperty(b)?d[b]!==e[b]&&(f++,d[b]=e[b]):(l++,d[b]=e[b],f++));if(l>a)for(b in f++,d)d.hasOwnProperty(b)&&!e.hasOwnProperty(b)&&(l--,delete d[b])}else d!==e&&(d=e,f++);return f}; newVal: 442; oldVal: 436","$index; newVal: 32; oldVal: 33","$index; newVal: 33; oldVal: 32","$index; newVal: 69; oldVal: 70","$index; newVal: 70; oldVal: 69","$index; newVal: 86; oldVal: 87","$index; newVal: 87; oldVal: 86"],["fn: function (){e=h(c);var a,b;if(X(e))if(qb(e))for(d!==\nm&&(d=m,l=d.length=0,f++),a=e.length,l!==a&&(f++,d.length=l=a),b=0;b<a;b++)d[b]!==e[b]&&(f++,d[b]=e[b]);else{d!==k&&(d=k={},l=0,f++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,d.hasOwnProperty(b)?d[b]!==e[b]&&(f++,d[b]=e[b]):(l++,d[b]=e[b],f++));if(l>a)for(b in f++,d)d.hasOwnProperty(b)&&!e.hasOwnProperty(b)&&(l--,delete d[b])}else d!==e&&(d=e,f++);return f}; newVal: 450; oldVal: 442","$index; newVal: 24; oldVal: 23","$index; newVal: 23; oldVal: 24","$index; newVal: 29; oldVal: 28","$index; newVal: 28; oldVal: 29","$index; newVal: 33; oldVal: 32","$index; newVal: 32; oldVal: 33","$index; newVal: 87; oldVal: 86","$index; newVal: 86; oldVal: 87"]]
     at ? line 6, column 449 (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular.min.js:6)
     at h.$digest line 101, column 152 (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular.min.js:101)
     at h.$apply line 103, column 100 (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular.min.js:103)
     at f line 67, column 98 (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular.min.js:67)
     at E line 71, column 117 (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular.min.js:71)
     at XMLHttpRequest.onreadystatechange line 72, column 167 (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular.min.js:72)

我们知道的事情
  • 我们正在使用 angularjs 1.2.7 和 ngRoute , bootstrap-ui ,以及许多其他自定义指令。
  • 它似乎只发生在 Android 2.3.x (Gingerbread) 和 Kindle Fire (Silk browser)
  • 我们似乎无法在浏览器堆栈、模拟器或物理设备中重现此错误。
  • 似乎没有孤立到特定的路线。

  • 问题

    是否有任何指导可以跟踪此错误的原因?
    使用源映射?
    暂时使用未放大版?
    在 angular 内部捕获其他东西?

    最佳答案

    试试这个,使用 Spy-js 进行 javascript 堆栈跟踪。您可以看到实际执行的调用堆栈和花费的时间(寻找滞后/超时):

    https://github.com/spy-js/spy-js

    http://spy-js.com/

    它现在通过 angularJS 支持集成到 WebStorm 中。

    http://blog.jetbrains.com/webstorm/2014/01/webstorm-8-eap/

    我还建议在调试时不要使用任何缩小的 JS。

    关于angularjs - 追踪无限摘要错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21322755/

    相关文章:

    javascript - Angular ng-change 指令不起作用

    javascript - AngularJS 防止按 Enter 键打开模式

    javascript - 错误 : [$injector:nomod] Module '<name_of_module>' is not available

    javascript - AngularJS Form 和 $scope 不互相更新

    css - VS2015-Cordova-Ionic-Angular-ngMap : map height defaults to 300px

    jquery - 无法从 Angular 调用 JQuery 插件

    javascript - $喷油器 :modulerr error in IE 11 Using AngularJS

    javascript - 结合 ui.bootstrap 和 mgcrea.ngStrap - angularjs

    javascript - Angular 组件 : no template replace option?

    c# - SignalR 不在服务器上调用方法