【问题标题】:Do JavaScript source maps work when catching errors?JavaScript 源映射在捕获错误时是否有效?
【发布时间】:2013-10-11 06:39:15
【问题描述】:

我已经使用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

是否可以使用源映射来改进这一点,还是仅在开发者工具处于活动状态时才有效?

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

【问题讨论】:

  • 需要解决同样的问题。你现在做这个多久了?
  • @iSid 没有找到解决方案。在浏览器实现它之前,这似乎是不可能的。不知道比答案中写的更多信息。对不起
  • @iSid 这个问题好像有更多的解决方案:stackoverflow.com/questions/19420604/…

标签: javascript source-maps


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-09-20
    • 2017-09-15
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 2019-02-03
    • 2015-10-29
    • 2020-01-13
    • 2013-03-03
    相关资源
    最近更新 更多