如何在AngularJS中获得更多的堆栈跟踪

Sér*_*els 17 exception angularjs

我正在使用装饰器来改变$exceptionHandler行为,将日志发送到服务器.我的问题是异常的stackatrace似乎没用,只显示堆栈的一部分.例如:

语法错误:令牌'undefined'不是表达式[expression here]的列NaN处的主表达式.

at Error (native)
at throwError (http://localhost:8080/angular/angular.js:6674:62)
at primary (http://localhost:8080/angular/angular.js:6918:9)
at unary (http://localhost:8080/angular/angular.js:6900:14)
at multiplicative (http://localhost:8080/angular/angular.js:6883:16)
at additive (http://localhost:8080/angular/angular.js:6874:16)
at relational (http://localhost:8080/angular/angular.js:6865:16)
at equality (http://localhost:8080/angular/angular.js:6856:16)
at logicalAND (http://localhost:8080/angular/angular.js:6847:16)
at logicalOR (http://localhost:8080/angular/angular.js:6839:41)
Run Code Online (Sandbox Code Playgroud)

有没有办法配置AngularJS来显示更多的堆栈?如果我查看Chrome控制台,我可以看到更多堆栈,并获取文件名,但不能在异常处理程序中.

即使我更改Error限制,我也看不到原始文件:

Error.stackTraceLimit = Infinity;
Run Code Online (Sandbox Code Playgroud)

nac*_*ch0 3

1 使用调试器,而不是 Chrome 控制台

Google Chrome 提供了一个调试器,可以帮助 JS 程序员找到 bug 和有问题的代码。

随着 JavaScript 应用程序复杂性的增加,开发人员需要强大的调试工具来帮助快速发现问题的原因并有效地修复它。Chrome DevTools 包含几个有用的工具,可以帮助减轻 JavaScript 调试的痛苦。

您可以尝试在任意位置放置一些断点(尝试检测有问题的行/方法)。

请参阅此处的官方文档:Google Chrome 调试器

2 使用浏览器扩展

许多插件(例如ng-inspectorAngularJS Batarang)可以帮助您打印 AngularJS 程序的状态(控制器实例、变量名称/值和范围)。

3 使用 $log 服务(console.log 包装器)

AngularJS $log 服务提供了一个简单的资源来在浏览器控制台中打印变量的状态(如果存在)。

简单的日志记录服务。默认实现将消息安全地写入浏览器的控制台(如果存在)。

该服务的主要目的是简化调试和故障排除。

默认是记录调试消息。您可以使用 ng.$logProvider#debugEnabled 来更改此设置。AngularJS $log 服务可以帮助您调试程序。


从我的角度来看,一个好的 AngularJS 调试包括上述所有解决方案的组合。

我希望它对你有用。

  • 缺乏堆栈跟踪使得调试工具毫无用处。如果OP知道放置断点的行号,我认为他不会问这个问题。 (16认同)
  • 我不会否决这个答案,因为它仍然包含有用的信息,但它并没有真正解决问题。我还需要更长的堆栈跟踪来确定*我的*代码中的哪一行正在生成错误。我想我也许可以使用调试器一直回到我的代码,但这感觉效率很低。 (3认同)