Chrome DevTools错误:"无法保存到临时变量."

Dev*_*lli 35 google-chrome node.js google-chrome-devtools

我正在使用Node Monkey来调试我的NodeJS应用程序.

当我在Chrome控制台中点击"存储为全局变量"时,它经常会出现"无法保存到临时变量"的情况.

在此输入图像描述

console.log({why:'dont', you:'work?'})
Run Code Online (Sandbox Code Playgroud)

它也发生在这个jsfiddle中

1)我做错了吗?

2)为什么会这样?

Chrome:50.0.2661.102(64位)OSX El Capitan 10.11.4

Mat*_*ert 77

我可以看到Store As Global Variable无法工作的两个原因:

1.选择了错误的控制台上下文

这可以说是Chrome错误,但如果控制台设置为与记录对象的代码相同的上下文,则只能将对象存储为全局.

实际上,这意味着您可能需要选择正确的IFrame或Web worker.

例如,在jsFiddle上:

在正常的jsFiddle编辑器页面上下文中,我收到一个错误.但是如果我将上下文改为小提琴本身的内容,它就有效:

2.垃圾收集

为了让Chrome为您提供对象的引用,对象仍然必须在内存中.如果不是这种情况,它只会抛出错误.

但是,我很确定在控制台中显示强制V8保持对值的引用.

  • 辉煌,它使用反应原生调试器为我2号 (6认同)
  • 谢谢!它对我有帮助(就我而言,我需要选择一个“ iframe”) (2认同)

Gid*_*zer 5

您需要在控制台本身中创建对象,因为Chrome需要维护对象的引用.只需将以下内容放入控制台:

{why:'dont', you:'work?'}
Run Code Online (Sandbox Code Playgroud)

安慰

如果您查看添加了功能的此修订版,则会说:

添加从打印的ObjectPropertySections(控制台,范围窗格等)访问对象的功能.

根据我的理解,问题console.log是输出对象的字符串表示,并且只是使用对象格式化器来很好地显示它.该对象不再存在.当您通过控制台本身创建对象时,Chrome会将对象本身存储在内存中.如果您在断点处暂停并具有本地范围的变量,则这些变量也可以全局存储,因为它们也在内存中.

如果你没有循环引用,你可以在代码中做的一件事是:

console.log(JSON.stringify({why:'dont', you:'work?'}));
> {"why":"dont","you":"work?"}
Run Code Online (Sandbox Code Playgroud)

在控制台中,复制输出并将其粘贴到JSON.parse呼叫中:

JSON.parse('{"why":"dont","you":"work?"}');
> Object {why: "dont", you: "work?"}
Run Code Online (Sandbox Code Playgroud)

该变量现在存在于内存中,因此您可以存储它.