源映射

时间:2015-08-30 14:45:59

标签: javascript debugging dart source-maps dart2js

我试图从dart2js生成的javascript中获得有用的错误。

将此代码放入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 / source-map /):

// 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()后,我发现给出结果的亚麻布就像 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 ...

1 个答案:

答案 0 :(得分:1)

我只猜测(因为我没有看到堆栈跟踪),但顶部框架可能是辅助函数。例如,dart2js可能会创建一个辅助函数" iae"而不是在体内抛出非法参数异常,而是调用该函数。

这导致代码更小,但顶层是源文件中不存在的函数。 iae函数也将由所有调用者共享,并且不会帮助调试。沿着框架走下去的方法应该会产生正确的位置。