Ошибка Chrome DevTools: "Не удалось сохранить временную переменную".
Я использую Node Monkey для отладки моего приложения NodeJS.
Часто бывает, что когда я нажимаю "Сохранить как глобальную переменную" в моей консоли Chrome, он говорит "Не удалось сохранить переменную temp".
![введите описание изображения здесь]()
console.log({why:'dont', you:'work?'})
Это происходит и в этом jsfiddle
1) Я что-то делаю неправильно?
2) Почему это происходит?
Chrome: 50.0.2661.102 (64-разрядный)
OSX El Capitan 10.11.4
Ответы
Ответ 1
Я вижу две причины, по которым Store As Global Variable не работает:
1. Неверный контекст консоли
Это, возможно, ошибка Chrome, но вы можете хранить объект только как глобальный, если консоль установлена в том же контексте, что и код, который регистрировал объект.
На практике это означает, что вам может потребоваться выбрать правильного IFrame или веб-рабочего.
Например, на jsFiddle:
![]()
В обычном контексте страницы редактора jsFiddle я получаю сообщение об ошибке. Но он работает, если я изменяю контекст на содержимое самой скрипки:
![]()
2. Сбор мусора
Чтобы Chrome дал вам ссылку на объект, объект все еще должен находиться в памяти. Если это не так, это может вызвать ошибку.
Тем не менее, я уверен, что отображение в консоли приводит к тому, что V8 сохраняет ссылку на значение.
Ответ 2
Вам нужно создать объект в самой консоли, так как ссылка на объект должна поддерживаться Chrome. Просто добавьте следующее в консоль:
{why:'dont', you:'work?'}
![Консоль]()
Если вы отметили эту версию, в которой была добавлена функция, в ней говорится:
Добавление возможности доступа к объектам из напечатанных объектов ObjectPropertySections (консоль, область областей и т.д.).
Проблема, основанная на моем понимании, заключается в том, что console.log
выводит строковое представление объекта и просто использует объектные formatters для его отображения. Объект больше не существует. Когда вы создаете объект через консоль, 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?"}
Теперь переменная существует в памяти, поэтому вы можете ее сохранить.