Ошибка Chrome DevTools: «Не удалось сохранить переменную temp».

я используюУзел Обезьяна отладить мое приложение NodeJS.

Часто бывает, что когда я нажимаю «Сохранить как глобальную переменную» в консоли Chrome, появляется сообщение «Не удалось сохранить во временную переменную».

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

Бывает и в этомjsfiddle

1) Я что-то не так делаю?

2) Почему это происходит?

Chrome: 50.0.2661.102 (64-разрядная версия) OSX El Capitan 10.11.4

Ответы на вопрос(2)

Вам необходимо создать объект в самой консоли, так как ссылка на объект должна поддерживаться Chrome. Просто поместите в консоль следующее:

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

Если вы проверитеэта ревизия где функция была добавлена, она говорит:

Добавлена ​​возможность доступа к объектам из напечатанных 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?"}

Переменная существует в памяти, поэтому вы можете сохранить ее.

 Gideon Pyzer02 июн. 2016 г., 01:53
@DevidFarinelli Я обновил свой ответ, чтобы добавить больше деталей и возможного обходного пути для вас.
 vuquanghoang26 нояб. 2018 г., 12:17
Я попытался console.log () в codepen и получил ту же проблему на
 Devid Farinelli01 июн. 2016 г., 15:05
Спасибо за ваш ответ! Это работает, но я обычно "Сохранить как глобальную переменную" также объект, напечатанный с использованием console.log, например, я могу сохранить объект, напечатанный этой HTML-страницей: <script type = "text / javascript"> console.log ( {почему: 'dont', вы: 'работа?'}) </ script> Проблема в том, что иногда это «Сохранить как глобальную переменную» не работает, и я не понимаю, почему.
 Matt Zeunert20 янв. 2017 г., 09:22
@DevidFarinelli Причина, по которой он не работает в jsFiddle, возможно, из-за того, что контекст, выбранный в консоли, установлен в редакторе скрипки, а не результат скрипта, который регистрирует объект.
 Devid Farinelli03 июн. 2016 г., 09:39
Еще раз спасибо @Gideon за помощь, это интересно. Сегодня «Сохранить как глобальную переменную» работает для моего приложения nodejs с использованием console.log ({почему: 'dont', вы: 'работа?'}), Но не работает для jsfiddle. Я не совсем понимаю.
 Gideon Pyzer20 янв. 2017 г., 09:31
@MattZeunert Спасибо за ответ на комментарий JSFiddle. Пропустил это. Имеет смысл :)
Решение Вопроса

Я вижу две причины, по которым Store As Global Variable не будет работать:

1. Выбран неверный контекст консоли

Возможно, это ошибка Chrome, но вы можете сохранить объект как глобальный, только если для консоли задан тот же контекст, что и для кода, который зарегистрировал объект.

На практике это означает, что вам может потребоваться выбрать правильный IFrame или веб-работника.

Например, на jsFiddle:

В обычном контексте страницы редактора jsFiddle я получаю сообщение об ошибке. Но это работает, если я изменяю контекст на содержимое самой скрипки:

2. Сборка мусора

Чтобы Chrome давал вам ссылку на объект, объект все еще должен находиться в памяти. Если это не так, он может только выдать ошибку.

Тем не менее, я уверен, что показ в консоли заставляет V8 сохранять ссылку на значение.

 shinzou23 апр. 2018 г., 10:11
Почему он должен переключать контекст? Это другой процесс?
 Tope25 февр. 2017 г., 04:16
блестяще, это был номер 2 для меня, используя реагировать родной отладчик
 Oleg Pro27 янв. 2017 г., 14:14
Спасибо! Это помогает мне (в моем случае мне нужно было выбратьiframe)

Ваш ответ на вопрос