捕获错误时JavaScript源映射是否有效?

时间:2013-10-11 06:39:16

标签: javascript source-maps

我使用window.onerror实现了客户端异常日志记录,我在其中检索当前错误和堆栈跟踪并使用AJAX将其发送到服务器

    window.onerror = function(message, url, line) {

      var stackTrace = printStackTrace(); //get stack trace

      //send message, url, line and stackTrace to the server using an ajax call
    }

其中printStackTrace是此库提供的函数:http://stacktracejs.com/

问题是在生产中所有的JavaScript文件都缩小了,因此堆栈跟踪和行号并没有真正帮助,因为所有错误都在文件的第1行报告,这是正常的,因为缩小版本包含一行码。例如:

Message: Object doesn't support property or method 'indexOf' 
URL: http://[server]/[site]/content/combined/combined.635EE367354E6DF721593CAC56FECF95.min.js
Line: 1

这可以使用源地图进行改进,还是仅在Developer Tools处于活动状态时才有效?

我想要的是,当没有启用开发人员工具激活/源映射的用户发生错误时,使用源映射(或至少是实际行号)获取完整堆栈跟踪。这有可能吗?

1 个答案:

答案 0 :(得分:4)

您绝对可以获得源地图中包含的所有信息并自行设计堆栈跟踪,但AFAIK还没有一个优雅的解决方案。无论哪种方式,它都需要最小化地图文件,可能还需要原始源文件。并且您将遇到一些棘手的跨浏览器问题,因为并非所有浏览器都完全支持源映射。

看起来堆栈跟踪在他们的计划中有这个但是还没有任何人在它上面执行: https://github.com/eriwen/javascript-stacktrace/issues/44

Get Sentry确实将其作为js日志记录实用程序的一部分,但它包含在一个更多用途的工具中,我相信它现在只支持Chrome中的完整堆栈跟踪日志记录: https://github.com/getsentry/raven-js