我正在尝试从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源地图文件无法理解?(以及如何解决这个问题)
向您致以亲切的问候并感谢您的帮助,
Hendrik Jan
一些额外信息:
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 ...
我只是猜测(因为我没有看到堆栈跟踪),但顶部框架可能是一个辅助函数。例如,与其在代码体中抛出非法参数异常,不如创建一个辅助函数"iae",并调用它。
这会导致更小的代码,但是顶部框架是源文件中不存在的函数。iae
函数也将由所有调用者共享,并且不会帮助调试。您的遍历框架的方法应该产生正确的位置。