2012-03-12 2 views
1

사용자를 리디렉션하는 많은 기능을 디버깅하려고합니다. console.log()의 출력을 읽는 동안 스크립트를 "kill"하고 싶습니다. 함께 작동하는 많은 기능이 있기 때문에 단순한 return을 사용할 수 없습니다.어떻게 자바 스크립트를 죽일 수 있습니까?

+1

alert()을 (를) 사용해 보셨습니까? –

+0

"함께 작동하는 많은 기능"은 여기에 유용한 의미를 전달하지 않습니다. 어떻게로드됩니까? 일정한 간격으로 만기가 결정됩니까? 비동기 적으로로드됩니까? 이벤트 핸들러입니까? – ZJR

답변

1

일시 중지하려는 코드의 지점에 중단 점을 설정하십시오. 지원하는 코드 브라우저에 debugger statement을 추가하면 해당 지점에서 자동으로 중지되고 디버거가 열립니다 (실제로 콘솔/dev 도구가 열려 있지 않으면 실제로 일부 브라우저 (Chrome?)이 명령문을 무시할 수 있다고 생각하지만 분명히 필요한 경우 dev 도구를 열어서 시작할 수 있습니다).

+0

콘솔이 열리지 않으면 Chrome에서이를 무시합니다. 아마 IE도 그렇습니다. 콘솔이 열려 있지 않으면'console'이 존재하지 않는다고 생각할 것입니다. –

1

은, 귀하의 경우에 모두 적용 할 수없는 몇 가지 옵션이 있습니다 :

  1. 가 예외를 던져; 그 기능과 모든 호출자 기능을 중지합니다;
  2. ismaelga가 제안한대로 alert()을 사용하십시오.
  3. nnnnnn이 제안한대로 중단 점을 설정하십시오. debugger 키워드를 사용하거나 브라우저의 GUI (있는 경우)를 사용할 수 있습니다.
  4. 빈 함수에 console.log을 다시 정의하십시오. 이렇게하면 아무 것도 기록되지 않으므로 간섭없이 지금까지 기록 된 내용을 읽을 수 있습니다.

옵션이 불가능합니다 일부 상황 :

  1. 코드가 이벤트에 응답하거나 setInterval 같은 것들을 사용하여, 심지어는 "메인 루프"경우 경우 정지 여전히 실행할 수있는 다른 코드와 로그 물건;
  2. 브라우저가 얼마나 눈에 띄는 지에 따라 경고 창이 표시되어 로그를 보지 못할 수 있습니다.
  3. 적절한 디버거가 없거나 디버거를 설치할 수 없습니다.
  4. 일부 기능에는 console.log의 로컬 복사본이 저장되어 있으므로이 기능을 다시 정의해도 영향을받지 않습니다.

모든 옵션 중에서 페이지를 "손상"하지 않고 침착하게 로그를 읽을 수 있으므로 4 번째로 sugest 할 것입니다. 로그를 "필터링"하려면 "올바른"로그 (저장된 복사본 console.log)를 호출하는 반면, 나머지는 "가짜"(다시 정의한 것) 호출을 호출 할 수 있습니다.

0

함수 외부에있는 전역 변수를 선언하고 각 함수 또는 해당 변수의 값을 확인하는 코드를 추가하고 값이 특정 방식으로 설정된 경우에만 진행합니다. 이 방법은 변수가 세마포어 역할을하므로 어디서든 값을 변경할 수 있으며 값에 따라 모든 처리를 종료 할 수 있습니다.

예를 들어, false로 초기화되는 stopProcessing이라는 간단한 부울 변수는 모든 함수가 리턴하고 모든 루프가 최대한 빨리 중단되도록하려면 true로 설정할 수 있습니다.

관련 문제