繁体   English   中英

为什么Chrome在调试中不允许更改变量

[英]Why Chrome don't allow change variables in debug

我在Chome devtools下的代码中运行

(function() {
  var a = 5;
  debugger; // when I stop here I evaluate `a = 9`
  console.log(a);
})(); // and got 5

但是如果我使用

(function() {
  var a = { a: 5 };
  debugger; // when I stop here I evaluate `a.a = 9`
  console.log(a.a);
})(); // and got 9

为什么?

PS还说明了为什么它在FF / Safari中不起作用(它甚至没有在调试器行中停止)

这只是行为上的错误 ,将在以后的版本中修复。

如果您想更深入地了解“ 为什么 ”,则需要了解许多有关Chrome的调试器和JavaScript实现的信息。 根据修复程序中一个文件的差异 ,调试器以前使用context_builder.native_context但现在使用context_builder.evaluation_context 显然,由旧调试器代码创建的native_context在解析(或不视为只读)本地作用域变量时遇到了问题。 如果您真的想要更多,可以联系修复的作者。

至于为什么调试器没有出现在Firefox中:如果您正在运行<script>代码并打开开发工具,则会显示该调试器。 从控制台运行代码时,似乎必须专门打开调试器选项卡。 显然,如果打开控制台以键入代码,这是不可能的,但是可以将其包装在setTimeout并快速切换到“调试器”选项卡:

setTimeout(function() { debugger; }, 5000)

这与如何使用变量有关。 对象通过引用使用。 因此,更改aa将有效地更改适当存储器地址处的值。 虽然,改变a因为在控制台评估的变量,创建一个新的内存地址,你的任何测试版本本身不会做任何事情。

为使FireFox不会在debugger行中断,它会在此页面中声明( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger ):“如果没有可用的调试功能,则此声明无效。”。 因此,您必须确保我认为已安装了FireBug。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM