我可以关闭优化,以免关闭中的范围内变量“被优化”

时间:2019-11-14 16:45:47

标签: javascript google-chrome optimization console v8

作为现代浏览器完成代码优化的副产品,在调试时,您无法“看到”“实际上”在范围内的所有变量。这是众所周知的,并已在previous question here on SO中解决。此功能虽然在生产中最肯定有用,但在开发过程中却使我很烦,但它会使我放慢速度(应该很明显)。

现在我的问题是,有什么办法可以关闭这种行为?我可以编辑一些配置文件,还是有浏览器插件,或者有浏览器可执行文件的“开发人员专用构建版本”?我喜欢在编写新代码时立即在控制台中输入代码,所以这确实困扰了我。

visualSummaryIffalseConsoleLog

更新/编辑

这是部分解决方案,应归功于Paul1365972。

您必须使用特殊选项从命令行启动chrome浏览器,如下所示:

  1. 完全关闭Chrome浏览器
  2. 使用"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax"从控制台运行Chrome 这适用于Windows其他类似的操作系统。
  3. 打开开发人员控制台并执行"%GetHeapUsage()"。如果您使用该选项正确启动了Chrome,则会在控制台上记录一个数字,否则会出现语法错误。

使用此命令行标志,您可以使用以%开头的命令与V8引擎“对话”,这是普通JavaScript中的语法错误。 given in Paul's answer是此类可用V8命令的列表。

该列表上有%NeverOptimizeFunction(),看起来就像我只需要调用并完成的事情。不幸的是,该功能没有实现我所希望的,如下面的屏幕快照所示。

lorem still not defined

((({other link from Paul's answer(v8-natives节点模块)在本文中对我们而言并不重要。它所做的只是将单线包裹在“%”函数调用周围,因此代码不会不会使非v8的浏览器崩溃。)))

(((((我记得有一段时间该优化方法还没有被发明/实现)。我不知道多久了。十年?十五年?类似的东西。最后一个Chrome是什么版本(如果有的话)以及您可以做什么的最后一个Firefox版本(请确保在这里存在)是什么?如果您碰巧知道并发布它,它不会给您带来赏金,但会给您带来赞誉。作为答案。)))

解决方案

感谢您的SRNICEK

hacky fix

新问题

尽管Petr的解决方案有很大帮助,但这并不完美。这个问题太长了,因此我发布了new question,说明如何改进Petr的解决方案。 (我当然可以在这里编辑此问题,但是,如果您了解我的意思,那将感到“不合历史”。)

3 个答案:

答案 0 :(得分:3)

Google Chrome使用V8 JS引擎,您可以使用--allow-natives-syntax标志启用对它的本机调用,这将公开许多有用的调试功能(完整列表here),就像您使用的那样寻找:%NeverOptimizeFunction()。没有此标志,这些调用将是非法语法,因此在部署(或使用v8-Natives库)时要小心。

要启用此功能,只需使用--js-flags =“-allow-natives-syntax”打开chrome(仅用于调试受信任的网站,因为这可以使不受信任的js代码访问您实际上不知道的东西希望它可以访问)。

答案 1 :(得分:2)

您可以通过将调试器语句包装在类似eval("debugger;");的eval中来访问所有变量。这种骇人听闻的解决方案虽然在调用堆栈中添加了另一个匿名函数,但显然对于在DevTools中手动设置的断点毫无用处。

这似乎不是一个很好的解决方案,但是由于它是迄今为止唯一实现预期行为的解决方案,因此我将其发布为答案。

答案 2 :(得分:0)

我真的希望这个问题有一个真实的答案。接下来的回答不是一个真正的答案,而是一个临时的解决方案。我编写了一个帮助程序工具,可以使用它通过静态分析来创建if (false) { console.log(variables, from, closures); }形式的愚蠢帮助程序代码(请参阅有问题的屏幕截图)-您粘贴代码,创建愚蠢的语句,可以将其复制,然后您无需输入。我不知道这是否有很大帮助,因为所有这些复制和粘贴操作也需要时间,但这就是我得到的。

screenshot

fiddle