【问题标题】:Chrome DevTools error: "Failed to save to temp variable."Chrome DevTools 错误:“无法保存到临时变量。”
【发布时间】:2016-09-30 11:14:51
【问题描述】:

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

当我在 Chrome 控制台中单击“存储为全局变量”时,经常会出现“无法保存到临时变量”。

console.log({why:'dont', you:'work?'})

这也发生在这个jsfiddle

1) 我是不是做错了什么?

2) 为什么会这样?

Chrome:50.0.2661.102(64 位) OSX El Capitan 10.11.4

【问题讨论】:

    标签: node.js google-chrome google-chrome-devtools


    【解决方案1】:

    Ctrl+Shift+C 并选择框架内打印对象的任何元素,然后重试。

    这将解决问题。

    【讨论】:

      【解决方案2】:

      我可以看到存储为全局变量不起作用的两个原因:

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

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

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

      例如在 jsFiddle 上:

      在正常的 jsFiddle 编辑器页面上下文中,我遇到了一个错误。但如果我将上下文更改为小提琴本身的内容,它就会起作用:

      2。垃圾收集

      为了让 Chrome 为您提供对该对象的引用,该对象仍必须在内存中。如果不是这样,它只能抛出一个错误。

      但是,我很确定在控制台中显示会强制 V8 保留对该值的引用。

      【讨论】:

      • 谢谢!它对我有帮助(在我的情况下,我需要选择 iframe
      • 太棒了,使用 react native 调试器对我来说排名第二
      • 为什么要切换上下文?这是一个不同的过程吗?
      • @Tope 你找到解决方法了吗?使用 React-Native 调试器完成同样的事情
      • @wheresmyspaceship 我不记得是否要确保我安装了该组件。但也许。原谅我。
      【解决方案3】:

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

      {why:'dont', you:'work?'}
      

      如果您查看添加该功能的this revision,它会显示:

      增加从打印的 ObjectPropertySections 访问对象的能力 (控制台、范围窗格等)。

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

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

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

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

      JSON.parse('{"why":"dont","you":"work?"}');
      > Object {why: "dont", you: "work?"}
      

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

      【讨论】:

      • 感谢您的回复!它可以工作,但我通常“存储为全局变量”也是使用 console.log 打印的对象,例如,我可以保存此 HTML 页面打印的对象: 问题是有时这个“存储为全局变量”不起作用,我不明白为什么。
      • @DevidFarinelli 我更新了我的答案,为您添加了更多细节和可能的解决方法。
      • 再次感谢@Gideon 的帮助,这很有趣。今天,“存储为全局变量”适用于我的 nodejs 应用程序,使用 console.log({why:'dont', you:'work?'}) 但不适用于 jsfiddle。我很困惑。
      • @DevidFarinelli 它在 jsFiddle 上不起作用的原因可能是因为在控制台中选择的上下文设置为小提琴编辑器,而不是记录对象的小提琴结果。
      • @MattZeunert 感谢您回答 JSFiddle 评论。错过了。有道理:)
      猜你喜欢
      • 2017-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2017-11-19
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多