Programing

jsfiddle에서 무한 루프 실행 취소

lottogame 2021. 1. 7. 07:33
반응형

jsfiddle에서 무한 루프 실행 취소


Chrome의 jsfiddle에서 무한 루프가 발생하면 유일한 선택은 탭을 닫는 것입니다. 물론 이것은 현재 창에서 모든 작업을 잃는다는 것을 의미합니다! 무한히 실행되는 스크립트를 중지하는 쉬운 방법이 있습니까?

  1. 디버깅을하고 있었기 때문에 개발자 도구가 열려 있습니다.
  2. 스크립트를 일시 중지하고 루프를 단계별로 실행할 수 있습니다.
  3. 스크립트를 중지 할 곳을 찾을 수 없습니다.
  4. 스크립트 또는 변수를 수정하여 무한 루프를 중지 할 수 없습니다 (스크립트 실행이 별도의 도메인의 iframe에서 발생하므로 JavaScript로 iframe의 데이터를 수정하는 것이 허용되지 않고 콘솔에 예외가 생성되기 때문입니다).

내 루프에서 방향을 바꾸기로 결정했기 때문에 모든 것이 시작되었습니다.

for (var c = 0; c <= 11; c++)

...에

for (var c = 12; c > 0; c++)

그러나 위에서 볼 수 있듯이에서 c++으로 변경하는 것을 잊었습니다 c--.

어떤 아이디어 ?? 나는 여전히 탭이 열려 있고 탭을 닫지 않고 다시 가져 오기를 바라고 있습니다 :-)


개발자 모드를 사용하면 리소스로 이동하여 스크립트를 찾아 복사하여 텍스트 문서 또는 새 창에 붙여 넣습니다. 리소스에서 찾을 수없는 경우 사용한 변수 또는 코드 줄을 검색합니다.


개발자 모드없이 수행하는 방법 :

  • 새 탭 열기
  • Shift-Escape로 작업 관리자 열기
  • 작업 종료
  • 종료 된 탭에 뒤로 버튼 사용 (JSFiddle은 스크립트를 실행하지 않음)
  • 버그 수정
  • 최신 정보

무한 루프를 끊는 한 가지 방법은 처리되지 않은 예외를 발생시켜 현재 호출 스택의 실행을 중지하는 것입니다. 그렇게하려면 :

  1. 디버거 일시 중지
  2. 예를 들어 함수 호출과 같은 루프 내에서 유망한 문을 찾으십시오. foo.bar(args)
  3. 콘솔에서 throw 할 함수를 덮어 씁니다. foo.bar=function(){throw 42;}
  4. 디버거 일시 중지 해제

나를 위해 일했습니다. 나는 시도하지 않았지만 getter 또는 setter를 오버로딩하면 위에서 설명한 트릭을 함수 호출뿐만 아니라 할당 및 읽기에도 사용할 수 있다고 생각합니다. 또한 변수를 정의되지 않음으로 설정하면이 변수의 필드가 루프에서 사용되는 경우 치명적인 오류가 발생하여 루프가 중단 될 수 있습니다. 예를 들어 delete foo.tab중단됩니다 foo.tab[42]foo.tab.bar. 어떤 이유로 단순히 foo=undefined콘솔에서 쓰기 만하면 되지 않습니다 (아마도 foo라는 콘솔 창에 로컬 변수를 정의 할 수 있습니다).


Process Explorer를 실행하고 CPU를 많이 사용하는 크롬 프로세스를 종료합니다. 페이지가 "충돌"되고 다시로드 할 수 있습니다.


루핑 탭이 활성화되어있는 동안 Chrome 작업 관리자를 시작할 수 없습니다. 다른 탭을 선택해야했습니다. 그런 다음 Shift-Escape를 눌러 작업 관리자를 시작하고 JSFiddle 프로세스를 종료하고 탭을 다시 선택한 다음 뒤로 버튼을 눌러 스크립트를 실행하지 않고 페이지를 표시했습니다.

JSFiddle은 iframe을 사용하여 "결과"패널을로드합니다. 2016 년 6 월 현재 프레임의 URL은 Fiddle URL에 "/ show /"를 더한 것입니다. iframe의 소스 코드를 조사한 결과 "/ light /"가 포함 된 또 다른 URL이로드된다는 사실을 발견했습니다. 이러한 URL 중 하나는 소스 코드를 포함해야합니다.

브라우저가 소스보기 URI 스키마를 지원하는 경우 다음과 같이 바이올린의 소스 코드에 액세스 할 수 있습니다.

  • view-source : jsfiddle.net/user_name/fiddle_hash/revision/light/
  • view-source : jsfiddle.net/user_name/fiddle_hash/revision/show/

여기에도 같은 문제가 발생하여 스크립트 일시 중지 상태에서 자바 스크립트 콘솔을 열었습니다. (개발자 도구를 사용하여 일시 중지)

그런 다음 while 루프가 종료되도록 변수 값을 변경했습니다.


다른 답변을 읽은 후 다른 사람이 멈춘 경우 여기에 도움이 된 것이 있습니다 (Chrome, Mac). 나에게 JSFiddle 탭은 '고정'되었지만 나머지 Chrome은 반응이 좋았습니다. 리소스 창에서 JavaScript 콘솔을 열었지만 응답하지 않았습니다. 이 상태에서 페이지를 다시로드하는 것은 JSFiddle이 내가 아무것도 얻기 전에 스크립트를 제공하기 때문에 도움이되지 않았습니다.

결국 이것은 나를 위해 일했습니다. 어쩌면 그것은 당신에게도 도움이 될 것입니다 ...

  • 페이지가 응답하지 않는 동안 Chrome > Preferences > PrivacyJavaScript 로 이동하여 비활성화하십시오.
  • 페이지가 죽을 때까지 기다리십시오 (약 4 ~ 5 분). 그 탭에 슬픈 얼굴 아이콘이 나타납니다.
  • Hit the back button. It should look like JSFiddle is loading, but it won't because funnily enough JSFiddle needs JavaScript just to render a page.
  • View > Developer > View source
  • My script, only slightly mangled, was sitting there all innocent like in a div called 'panel_js'.
  • Highlight, copy, breathe again, learn lesson.

I had file stuck in a loop and would freeze up the dashboard on JSFiddle as well.

  • The only way I could clear was to disable JavaScript in the preferences tab while I had a New Fiddle page open in a different Chrome tab.
  • Then navigate to All Fiddles.
  • Delete the Fiddle and then it would give a 404 error.
  • Turn on the JavaScript and reload the Dashboard.
  • Was able to continue on making and editing fiddles after that.

ReferenceURL : https://stackoverflow.com/questions/7616143/cancel-infinite-loop-execution-in-jsfiddle

반응형