2013-10-11 20 views
6

我已經實現用window.onerror,在那裏我檢索當前的錯誤和堆棧跟蹤,並將其發送給使用AJAX捕捉錯誤時JavaScript源地圖是否可用?

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 

可以這樣使用源地圖可以改善或根本的工作,只有當開發者工具是活動的?

我想什麼是讓使用源地圖的完整的堆棧跟蹤(或至少是實線數)時誰沒有激活啓用/源地圖的開發工具,用戶出現錯誤。這可能嗎?

+0

對於同樣的問題需要解決。你現在多久了? – IsmailS

+0

@iSid尚未找到解決方案。似乎它是不可能的,直到瀏覽器實現它。不知道更多的信息比寫在答案中。對不起 – SzilardD

+0

@iSid這個問題似乎有更多的解決方案:http://stackoverflow.com/questions/19420604/angularjs-stack-trace-ignoring-source-map – xmojmr

回答

4

你絕對可以得到所有的信號源包含的地圖信息和工程師對自己的堆棧跟蹤,但據我所知沒有這一個優雅的解決方案呢。無論哪種方式,它都需要至少將地圖文件放在最下面,並且可能是原始源文件。而且,由於並非所有瀏覽器都支持源映射,因此您將遇到一些棘手的跨瀏覽器問題。

它看起來像堆棧跟蹤有這個在他們的計劃,但沒有任何人在其上執行尚未: https://github.com/eriwen/javascript-stacktrace/issues/44

獲取哨兵不這樣做,因爲他們的JS日誌實用程序的一部分,但它包裹的內更多多用途的工具,我相信它僅支持在Chrome現在完整的堆棧跟蹤記錄: https://github.com/getsentry/raven-js