javascript - 我可以关闭优化吗​​,这样闭包中的范围内变量就不是 "optimized out"

标签 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 中的语法错误。此类可用 V8 命令的列表为 given in Paul's answer .

该列表中有 %NeverOptimizeFunction() ,这看起来像是我只需调用并完成它即可。不幸的是,该函数没有达到我所希望的效果,如下一个屏幕截图所示。

lorem still not defined

(((other link from Paul's answer (v8-natives 节点模块) 在这种情况下对我们来说并不重要。它所做的只是将单行代码包裹在“%”函数调用周围,因此代码不会使非 v8 的浏览器崩溃。)))

(((我记得这个方法曾经有效过(当时这个优化还没有发明/实现)。我不知道多久以前。十年?15年?类似的事情。最后一个 Chrome 是什么版本(如果有)以及您可以做什么的最后一个 Firefox 版本(更确定它存在)是什么?它不会为您带来赏金,但如果您碰巧知道并发布它,它会给您一个赞成票作为答案。)))

解决方案

谢谢彼得·斯尼切克

hacky fix

新问题

虽然 Petr 的解决方案很有帮助,但它并不完美。这个问题太长了,所以我发了一个new question关于如何改进 Petr 的解决方案。 (我当然可以在这里编辑这个问题,但如果你明白我的意思,那会感觉“不符合历史”。)

最佳答案

您可以通过将调试器语句包装在 eval 中来访问所有变量,如下所示:eval("debugger;");。这个 hacky 解决方案向调用堆栈添加了另一个匿名函数,但它显然对于在 DevTools 中手动设置的断点没有用处。

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

关于javascript - 我可以关闭优化吗​​,这样闭包中的范围内变量就不是 "optimized out",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58861823/

相关文章:

javascript - AngularJS - 根据当前路径更改 href 属性

jQuery、$.load 在 webkit 和 opera 中不起作用?

optimization - ARM NEON : How to implement a 256bytes Look Up table

javascript - HTML5 : Javascript to force offline cache rebuild?

javascript - RequireJS 中未定义必需参数

javascript - Firefox 和 Chrome 中的 getUserMedia() 视频大小不同

algorithm - 如何计算卡车装载中的最大托盘数量?

c++ - 优化 C++ 模板执行

javascript - asp.net mvc2 上的 jQuery ajax 帖子

jquery - 在非事件选项卡中实时暂停或运行 setInterval 函数