2015-08-30 21 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函数也会被所有的调用者共享,并且不会帮助调试。你走下框架的方法应该产生正确的位置。