[javascript] 최적화를 끌 수 있으므로 클로저의 범위 내 변수가 “최적화되지 않습니다”

최신 브라우저에서 수행 한 코드 최적화의 결과로 디버깅하는 동안 “실제로”범위에있는 모든 변수를 “볼 수”없습니다. 이것은 잘 알려져 있으며 이전 질문에서 해결되었습니다 . 이 기능은 프로덕션 환경에서 가장 유용하지만 개발 과정에서 많은 어려움을 겪고 있지만 속도가 느려집니다.

이제 내 질문은,이 동작을 해제 할 수있는 방법이 있습니까? 일부 구성 파일을 편집 할 수 있습니까, 아니면 브라우저 플러그인이 있습니까, 아니면 브라우저 실행 파일의 “개발자를위한 특수 빌드 버전”이 있습니까? 새 코드를 작성할 때 콘솔에 코드를 바로 입력하는 것을 좋아하므로 실제로 버그가 있습니다.

visualSummaryIffalseConsoleLog

업데이트 / 편집

다음은 Paul1365972의 일부 솔루션입니다.

다음과 같은 특수 옵션을 사용하여 명령 행에서 크롬 브라우저를 시작해야합니다.

  1. 크롬을 완전히 닫습니다
  2. "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax"
    다른 OS와 유사한 Windows 용 콘솔에서 Chrome을 실행하십시오 .
  3. 개발자 콘솔을 열고를 실행하십시오 "%GetHeapUsage()". 옵션으로 Chrome을 올바르게 시작하면 콘솔에 숫자가 기록됩니다. 그렇지 않으면 구문 오류가 발생합니다.

이 명령 행 플래그를 사용하면 %일반 JavaScript의 구문 오류 인로 시작하는 명령으로 V8 엔진과 대화 할 수 있습니다 . 이런 종류의 사용 가능한 V8 명령 목록 은 Paul의 답변에 나와 있습니다.

%NeverOptimizeFunction()난 그냥 전화와 함께 할 수있는하려는 것처럼 보였다 뭔가 그 목록에. 불행히도 다음 스크린 샷에서 볼 수 있듯이 해당 기능은 내가 원하는 것을 수행하지 않습니다.

lorem은 아직 정의되지 않았습니다

((( Paul의 답변 (v8-natives 노드 모듈) 의 다른 링크 는이 문맥에서 우리에게 중요하지 않습니다. 코드가 충돌하지 않도록 “%”함수 호출 주위에 한 줄짜리 줄 바꿈) v8이 아닌 브라우저))))

(((이 기능이 작동 한 시점을 기억합니다 (최적화가 아직 발명 / 구현되지 않은 시점). 나는 얼마나 오래 전인지 모르겠습니다. 10 년? 15 년? 그런 것. 마지막 Chrome 버전은 무엇입니까? any) 그리고 당신이 할 수있는 마지막 파이어 폭스 버전 (여기서 더 확실합니다)은 무엇입니까? 그것은 당신에게 현상금을 얻지 못하지만 당신이 그것을 알고 답으로 게시하면 공감대를 얻습니다. .)))

해결책

감사합니다 SRNICEK

해키 수정

새로운 질문

Petr의 솔루션은 많은 도움이되지만 완벽하지는 않습니다. 이 질문은 너무 오래 걸리므로 Petr의 솔루션을 개선하는 방법 에 대한 새로운 질문 을 게시했습니다 . (물론 여기서이 질문을 편집 할 수는 있지만, 내가 무슨 뜻인지 알면 “역사적”이라고 느낄 것입니다.)



답변

디버거 문을 다음과 같이 평가하여 래핑하여 모든 변수에 액세스 할 수 있습니다 eval("debugger;");. 이 해키 솔루션은 호출 스택에 다른 익명 함수를 추가하며 DevTools에서 수동으로 설정되는 중단 점에는 사용되지 않습니다.

이것은 좋은 해결책은 아니지만 지금까지 의도 한 동작을 달성하는 유일한 방법이므로 답으로 게시하고 있습니다.


답변

Chrome은 V8 JS-Engine을 사용하므로 –allow-natives-syntax 플래그를 사용하여 네이티브 호출을 활성화 할 수 있습니다.이 기능 은 찾고있는 것과 같은 유용한 디버깅 기능 (전체 목록은 여기에 있습니다 ) : % NeverOptimizeFunction () . 이 플래그가 없으면 이러한 호출은 잘못된 구문이므로 배포 할 때주의해야합니다 (또는 v8-Natives 라이브러리 사용).

이 기능을 사용하려면 –js-flags = “-allow-natives-syntax”를 사용하여 크롬을 열기 만하면됩니다 (신뢰할 수없는 웹 사이트 디버깅에는이 기능 만 사용하십시오. 에 액세스 할 수 있음).


답변

이 질문에 실제 답변이 있기를 바랍니다. 다음은 실제 답변이 아니며 임시 변통입니다. if (false) { console.log(variables, from, closures); }정적 분석을 사용하여 양식의 어리석은 도우미 코드를 만들 수있는 도우미 도구를 작성했습니다 (문제의 스크린 샷 참조)-코드에 붙여넣고 어리석은 말이 만들어지고 복사 할 수 있습니다. 입력하십시오. 이 모든 복사 및 붙여 넣기에도 시간이 걸리기 때문에 이것이 큰 도움이되는지 모르겠습니다. 그러나 이것이 제가 얻은 것입니다.

스크린 샷

깡깡이


답변