代码之家  ›  专栏  ›  技术社区  ›  SzilardD

JavaScript源代码映射在捕捉错误时是否有效?

  •  8
  • SzilardD  · 技术社区  · 11 年前

    我已经使用实现了客户端异常日志记录 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
    

    这可以通过使用源映射来改进吗?还是只有当开发工具处于活动状态时才有效?

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

    1 回复  |  直到 11 年前
        1
  •  4
  •   chrisst    11 年前

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

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

    Get Sentry将此作为其js日志记录实用程序的一部分,但它被封装在一个更多用途的工具中,我相信它目前只支持Chrome中的全栈跟踪日志记录: https://github.com/getsentry/raven-js