2016-06-01 4 views
16

내 NodeJS 앱을 디버그하기 위해 Node Monkey을 사용하고 있습니다.Chrome DevTools 오류 : "임시 변수에 저장하지 못했습니다."

Chrome 콘솔에서 "전역 변수로 저장"을 클릭하면 "임시 변수에 저장하지 못했습니다."라는 메시지가 자주 발생합니다.

enter image description here

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

그것은 잘못이 jsfiddle

1) 내가 뭐하는 거지 뭔가도됩니까?

2) 왜 이런 일이 발생합니까?

크롬 : 50.0.2661.102 (64 비트) OSX 엘 카피 탄 10.11.4

답변

31

:

1. 이것은 틀림없이 크롬 버그,하지만 당신은 같은 객체를 저장할 수

선정 잘못된 콘솔 컨텍스트 콘솔을 객체를 기록한 코드와 동일한 컨텍스트로 설정하면 전역입니다.

실제로 이것은 올바른 IFrame 또는 웹 작업자를 선택해야 할 수도 있음을 의미합니다. jsFiddle에 예를 들어

:

일반 jsFiddle 편집기 페이지 맥락에서 나는 오류를 받고 있어요.위해서는

2. 쓰레기 수거

크롬 객체 여전히 당신에게 개체에 대한 참조를 제공하기 위해 : 나는 바이올린 자체의 내용에 컨텍스트를 변경한다면 그것은 작동 기억에 있어야합니다. 그렇지 않은 경우에만 오류가 발생할 수 있습니다.

그러나 콘솔에 표시되면 V8에서 값에 대한 참조를 유지해야합니다.

+0

고마워요! 그것은 나를 돕는다. (나의 경우에는'iframe'을 선택해야한다.) –

+5

똑똑하다. 내게는 반응하는 네이티브 디버거를 사용하는 2 번이다. – Tope

4

객체에 대한 참조가 크롬에 의해 관리 될 필요가과 같이, 콘솔 자체에서 개체를 만들어야합니다. 그냥 넣어 대신 콘솔에 다음이 기능이 추가되었습니다 this revision을 선택하면

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

Console

, 그것은 말한다 :

Adding ability to access objects from printed ObjectPropertySections (console, scopes pane and etc.).

문제, 내 이해를 바탕으로, console.log이 객체의 문자열 표현을 출력하고 객체 포맷터를 사용하여 멋지게 표시한다는 것입니다. 개체가 더 이상 존재하지 않습니다. 콘솔을 통해 객체를 만들면 Chrome은 객체 자체를 메모리에 저장합니다. 중단 점에서 일시 중지하고 로컬 범위 변수가있는 경우 변수가 메모리에 있기 때문에 변수를 전역으로 저장할 수도 있습니다.

JSON.parse('{"why":"dont","you":"work?"}'); 
> Object {why: "dont", you: "work?"} 
하십시오 JSON.parse 전화에 출력을 복사하여 붙여 넣기, 콘솔에서

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

: 당신은 순환 참조를 가지고하지 않은 경우, 코드에서 할 수있는

한 가지입니다

변수가 메모리에 있으므로 변수를 저장할 수 있습니다. 스토어 글로벌 변수가 작동하지 않을 것처럼 왜 두 가지 이유를 볼 수 있습니다

+0

답장을 보내 주셔서 감사합니다. 작동하지만 일반적으로 console.log를 사용하여 인쇄 된 객체 인 "전역 변수로 저장"을 사용합니다. 예를 들어 때때로 "이 전역 변수로 저장"이 작동하지 않고 그 이유를 이해하지 못하는 것이 문제입니다. –

+1

@DevidFarinelli 좀 더 자세한 내용과 가능한 해결 방법을 추가하기 위해 제 대답을 업데이트했습니다. –

+0

도움을 주신 @Gideon에게 다시 한 번 감사드립니다. 흥미 롭습니다. 오늘 "글로벌 변수로 저장"은 console.log ({why : 'dont', you : 'work?'})를 사용하여 내 nodej 앱에서 작동하지만 jsfiddle에서는 작동하지 않습니다. 혼란 스럽습니다. –

관련 문제