javascript 자바스크립트 Chrome 자바 스크립트 디버깅:값이 변경되면 중단하는 법




크롬 이벤트 추적 (3)

큰 자바 스크립트 코드 기반을 디버깅하고 있습니다. 어느 시점에서 페이지를 새로 고칠 때 "콘솔"변수가 null이됩니다.

해당 값이 변경되거나 (console == null) 조건 (console == null) 이 참일 때) 콘솔에서 감시를 설정하고 JavaScript 중단 실행을 수행 할 수 있습니까?

Windows 7에서 Chrome을 사용하고 있습니다.


Answer #1

console 객체를 만질 수는 없습니다. console 변수가 전역 범위가 아닌 범위 / 네임 스페이스에서 선언되어 전역 콘솔을 숨길 수있는 유일한 경우입니다. 그래도 window.console 을 사용하여 액세스 할 수 있습니다. 그 외에도 내가 생각할 수있는 유일한 일은 다음과 같습니다.

  • 콘솔을 재정의 한 사용자 에이전트를 콘솔을 지원하지 않는 IE 버전을 에뮬레이트하도록 설정했습니다.
  • 코드에 대한 다른 문제로 인해 코드가 오류를 발생시킵니다.
  • @alexandernst가 지적했듯이 : 당신은 콘솔 객체의 프라퍼티를 오버라이드하고있다. 액세스 할 수없는 메소드를 삭제하면 괜찮습니다.

코드를 살펴보고 조건부 중단 점을 설정 하고 몇 가지 표현식을보고 필요없는 예외에 대한 일시 중지 단추를 사용하는 위치를 찾으려면


Answer #2

console (다른 브라우저 고유의 환경 변수와 마찬가지로)이 특별히 처리되므로 window.console 대한 아래의 대답은 작동하지 않습니다. console 값을 할당하려는 시도는 원래 값을 "덮어 버립니다". 그것을 대체하지 않습니다. console 값이 변경되면이를 감지 할 수 없지만 delete window.consoledelete window.console 하여 원래의 환경 제공 값을 복원 할 수 있습니다.

다른 값의 경우 Object.defineProperty 를 사용하여 일부 전역 window.foobar 대한 사용자 정의 설정 Object.defineProperty 정의하십시오. window.foobar 에 새 값이 할당 될 때마다 setter 함수가 실행됩니다.

(function() {
    var actualFoobar = window.foobar;

    Object.defineProperty(window, "foobar", {
        set: function(newValue) {
            if(newValue === null) { 
                alert("someone is clobbering foobar!"); // <-- breakpoint here!
            }

            // comment out to disallow setting window.foobar
            actualFoobar = newValue;
        },

        get: function() { return actualFoobar; }
    });

})();

그런 다음 setter 함수에 중단 점을 넣습니다.

이 접근법은 전역 변수 또는 모든 객체 속성 (단순히 속성을 가진 객체로 window 을 변경)에 적용됩니다.


Answer #3

브라우저 구현 함수는 null이 될 수 없습니다! 엄밀히 말하면.

window.console.log funcion에 null 이 할당 된 경우 삭제하면됩니다.

delete console.log

그 일을 할 것입니다 :)

편집 : 귀하의 주요 질문에 대한 대답이 아니지만, 귀하의 질문에 디버깅하는 방법을 찾고있어, 그래서이 대답은 기본적으로 var 변화를 감지하는 필요를 건너 뛰는 것 같아요.





google-chrome