调试器显示源映射的错误信息

时间:2014-08-23 10:06:40

标签: javascript google-chrome debugging source-maps uglifyjs2

这已经发生了第二次,正如您可以想象的那样,显示错误信息的调试器是调试时可能发生的最糟糕的事情。当使用源映射时,调试器认为VM处于某一行,但实际上它还没有存在,或者更糟糕的是,永远不会到达这一行。使用Grunt uglify插件生成源映射,该插件使用UglifyJS2

一个例子:

if(something === 1){
    console.log("it's something"); // debugger thinks the VM is here
else{
    console.log("no it's not");    // while actually it's here
}

然后打印no it's not,但调试器跳转到if

我遇到的另一个例子是:

var that = this;
some.functionCall(1, function(){
    console.log(that);  //this is where the debugger thinks the vm is
    // debugger: that = undefined
    // console prints nothing to that point
});

当我继续该计划时,console.log(that)最终确实开火了。

其他人是否遇到过同样的问题?它更可能是UglifyJS2或Google Chrome的问题吗?

Chrome版本:38.0.2125.8 dev(64位)
Uglify2JS:2.4.0
grunt-contrib-uglify:0.5.1

1 个答案:

答案 0 :(得分:1)

我发现了类似的问题。偏移量与注释行数完全相同。

编辑根本原因是在第三方库中出现了以//>>为前缀的行。每条这样的线都会产生1行偏移。它们似乎是一些折旧的requirejs构建编译指示。

对我们来说,解决方案是在构建时在代码中找到并替换它们,因为我们在构建系统中不使用pragma。

sed -i -e 's_//>>_// pragma was here: _g' `find . -type f -name "*.js"`