在Chrome调试器中,是否有可能将所有虚拟机脚本进行黑盒处理?

38

我正试图调试我的angular app中一个相当复杂的模块。我已经在特定方法的开头设置了断点,希望能够跟踪并查看它在哪里返回错误。然而,它一直将我引入VM脚本(VM28337、VM30559等)。我可以假设这些都按照预期工作,因此我对它们没有兴趣。

我知道我可以在chrome debugger中黑盒某些脚本,但似乎有无数个这样的VM脚本。是否有人有关于如何规避这些脚本的建议?


2
VM脚本是通过ajax请求动态拉取的代码,因此它们没有标记其文件名。我也在寻找一种方法来解决这个问题。VM*不起作用... - OrangeKing89
2
这个也不起作用:^VM/\b\d{5}\b/g - OrangeKing89
2
谢谢你告诉我。我正要深入研究正则表达式。 - abyrne85
1
有没有找到解决方法?我已经寻找了一段时间。通常情况下,您可以右键单击脚本并在那里将其加入黑名单,但是这些类型的脚本上没有菜单。 - PRB
据我所知,目前没有办法做到这一点。如果能作为黑盒功能的一部分实现将是很好的。我建议在crbug.com上创建一个工单来处理此事。 - jaredwilli
只是确认一下,您想让 console.log() 不显示它来自哪里的源代码,对吗(例如 VM300:1)? - information_interchange
2个回答

10

目前在任何版本的Chrome中似乎都不可能实现这一点。 不过,我已经创建了一个Chromium bug来请求添加此功能:Chromium Issue 526239


这方面还有什么进展吗? - Tony Brasunas

2

在开发期间,一个解决方法是在你的页面中覆盖eval函数 -

(function ()
 {
  var originalEval = eval;
  eval =
   function (script)
   {
    return originalEval(script + "\n//# sourceURL=blackbox-this.js");
   }
 }());

然后是黑盒子 ^.*blackbox-this.js$

对于setInterval/setTimeout,当它得到一个字符串时也是一样的(但这是不好的实践,对吧?;))

你觉得这样可以吗?


怎么做到的?我没有成功地进行下一步。我如何使用这个来使DevTools停止调试VM###? - Mike
1
@Mike - 这需要成为页面上的第一个脚本(这假定生成那些 VM### 的代码使用 eval,否则,您需要覆盖其他手段,如 setTimeoutFunction 或尽可能使用 friends)。 - PhistucK
这对于AngularJS应用程序无效,至少还有一些VM没有注入的sourceURL。此外,它应该检查该脚本中是否已经存在sourceURL,以便开发人员可以控制要显示或不显示的内容。 - Bernardo Dal Corno
@Z.Khullah - 我猜他们可能正在使用其他方法来评估代码。比如说new Function(...)或者注入一个<script>code</script> - PhistucK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接