2015-08-30 19 views
2

我想從dart2js生成的javascript中獲取有用的錯誤。Dart2js錯誤行號不被源地圖接受

通過將這些代碼在我的index.html:

window.addEventListener(
    'error', 
    function(e){ 
     ga(
      'send', 
      'event', 
      'JS Error', 
      'msg:'+e.message, 
      'line:'+e.lineno+' col:'+ e.colno+' file:'+e.filename, 
      {'nonInteraction':1} 
     ); 
    },false); 

我得到谷歌分析給我行號碼和我的網站的用戶中出現的錯誤的列數。

然後我使用Mozilla的源地圖的消費者,找出發生在原來的錯誤,像這樣的(使用的github/Mozilla瀏覽器/源圖/):

// some code removed for readability 
require(["source-map/source-map-consumer"], function(SMC) { 

var input = { 
    line: parseInt(line), 
    column: parseInt(col) 
}; 

// rawSourceMap contains the dart2js generated source-map 
var smc = new SMC.SourceMapConsumer(rawSourceMap); 

console.log(smc.originalPositionFor(input)); 

的問題是,所有的我曾經得到的是:

{ 
"source": null, 
"line": null, 
"column": null, 
"name": null 
} 

雖然我期待像

{ 
"source": "image.dart", 
"line": 324, 
"column": 2, 
"name": "clickController" 
} 

我到目前爲止發現的錯誤行數是這樣的line: 6862, column: 31(高行數a和低列數)。

一些測試,並使用smc.eachMapping()後,我發現linenumbers,讓一個結果是像line: 7140, column: 1692(高行號和列高數)。

我的問題:
沒有任何人有一個想法,爲什麼dart2js javascript文件生成錯誤的dart2js源地圖文件能不明白? (以及如何解決這一問題)的任何幫助

親切的問候和感謝,
亨德里克·揚


一些額外的信息:

的pubspec.yaml看起來是這樣的:

name: bones 
description: A sample web application 
dependencies: 
    browser: any 
    observe: any 
transformers: 
    - $dart2js: {"minify":true, "checked":false} 

我已經試過"minify":false"checked":true無濟於事。

錯誤看起來是這樣的:

Uncaught Uncaught Error: Invalid argument(s) Stack Trace: Invalid argument(s) at dart.b (.../script.dart.js?0:1245:3) at F.dart.F.T (.../script.dart.js?0:479:48) at J.aF ... and so on ... 
+0

您是否試圖手動定位錯誤消息指向的源代碼?也許是源地圖消費者中的一些錯誤。 –

+0

你似乎是對的。我的思考或源地圖消費者中的一些錯誤。 Chromium開發工具正確應用生成的源地圖,因此dart2js源地圖生成不會出錯。 –

+0

似乎像堆棧跟蹤**中的某些行/列引用不會導致源映射使用者命中,而同一跟蹤**中的其他行/列引用也會導致工作。我現在只是(手動)遍歷所有返回的數字,直到消費者返回有用的數據。 –

回答

1

我只是猜測(因爲我沒有看到堆棧跟蹤),但頂部框架可能是一個輔助功能。例如,不是在主體內部拋出一個非法的參數異常,而是可以創建一個輔助函數「iae」,然後調用該函數。

這會導致較小的代碼,但頂幀是源文件中不存在的函數。 iae函數也會被所有的調用者共享,並且不會幫助調試。你走下框架的方法應該產生正確的位置。