브라우저의 디버거 자체에서 동적으로로드 된 JavaScript (jQuery 사용)를 디버깅하는 방법은 무엇입니까?


92

동적으로 추가 된 스크립트가 브라우저의 디버거 스크립트 섹션에 표시되지 않습니다.

설명:

나는 사용하고 사용했다

if( someCondition == true ){
   $.getScript("myScirpt.js", function() {
       alert('Load Complete');
       myFunction();
   });
}

myScript.js가 어떤 조건을 충족 할 때 동적으로로드 될 수 있도록 ... 그리고 myFunction은 전체 스크립트를로드 한 후에 만 ​​호출 할 수 있습니다.

그러나 브라우저는 디버거의 스크립트 섹션에 동적으로로드 된 myScript.js를 표시하지 않습니다.

브라우저 자체에서 동적으로로드 된 스크립트를 디버깅 할 수있는 모든 목표를 달성 할 수있는 다른 방법이 있습니까?



2
사용 debugger;동적으로로드 스크립트 자동 정지, 참조 javascript.info/debugging-chrome
유 양 지앤

답변:


208

동적으로로드 된 스크립트에 이름을 지정하여 Chrome / Firefox JavaScript 디버거에 표시되도록 할 수 있습니다. 이렇게하려면 스크립트 끝에 주석을 추가합니다.

//# sourceURL=filename.js

이 파일은 "소스"탭에 다음과 같이 표시됩니다. filename.js . 내 경험상 이름에 \ 's를 사용할 수 있지만 /'s를 사용하면 이상한 동작이 발생합니다.

자세한 내용 은 // @ sourceurl의 동적 JavaScript 지원 중단의 중단 점을 참조하세요.


19
// @은 여전히 ​​Chrome에서 작동하지만 // #으로 변경됩니다. .html 파일의 스크립트도 같은 방식으로 이름을 지정할 수 있습니다. 조심해! '='기호 앞뒤에 공백을 두지 마십시오.
Mert Mertce 2013 년

11
저에게는 js 파일이 "(도메인 없음)"이라는 그룹 내의 소스 목록에 표시되었습니다. 처음에는 놓 쳤기 때문에 언급 할 가치가있을 것입니다!
JMac

7
팁입니다. Chrome 디버거는 최소한 localhost에서 디버깅 할 때 소스 탭의 "(도메인 없음)"노드 요소에 이러한 의사 자바 스크립트 파일을 전달합니다. 그곳에서 그들을 찾았습니다.
Robert Oschler

1
주의해야 할 또 다른 것은 주석 스타일입니다. 제공 한 "// @ sourceURL의 지원 중단"링크에는 "// # sourceURL ="및 "/ * # sourceURL ="이 모두 언급되어 있습니다. 이는 단일 행 "//"주석이 유효하지 않기 때문에 블록 주석을 사용해야하는 CSS에도 사용할 수 있기 때문입니다. 나를 놀라게 한 것은 자바 스크립트에서 "/ * sourceURL ="을 사용할 수 없다는 것입니다. 그냥 무시됩니다.
Jools

2
Afaik, 대부분의 JavaScript minifier는 프로덕션 단계에서 이러한 줄을 제거하므로 프로덕션 버그 진단에 쓸모가 없습니다.
Lluís Suñol

16

당신은 사용할 수 있습니다 //# sourceURL=//# sourceMappingURL=스크립트 파일 또는 스크립트 태그의 끝에서.

참고 : //@ sourceURL//@ sourceMappingURL더 이상 사용되지 않습니다.


추가 지원 중단 정보 : developers.google.com/web/updates/2013/06/…
Pysis

물론입니다.하지만 대부분의 미니 파이크는 생산 단계에서이 라인을 제거합니다.
Lluís Suñol

13

OP에 의해 해결 방법으로 제안 된 "// # sourceURL = filename.js"를 사용해 보았지만 이전 시간의 탭에 이미 존재하지 않는 한 소스 패널에 여전히 표시되지 않았습니다. 예외가 발생했습니다.

"디버거"코딩 라인이 그 위치에서 끊어지게했습니다. 그런 다음 Sources 패널의 탭에 있으면 정상적으로 중단 점을 설정하고 "디버거"를 제거 할 수 있습니다. 선.


6
소스 탭 아래의 (도메인 없음) 목록에도 표시 될 수 있습니다.
Splaktar

1
또한을 사용해야 debugger;했고 스크립트가로드되는 동안 DevTools를 열어야했습니다.
Barmar

2
추가 정보의 비트 : 사용 browsertools : // 프로토콜로 같이 //# sourceURL=browsertools://yourdomaingoeshere.com/action-openuwws.js
dolbysurnd

6

이러한 방식으로 소스 탭에 나타나는 소스 파일은 (도메인 없음) 그룹에 나타나며 , 디버그하려는 경우 추가해야합니다.debugger; 코드에 줄 해당 줄이 실행되도록해야합니다 (일반적으로 소스 파일 실행 시작) 원하는 곳에 중단 점을 추가하십시오.

debugger;코드에 줄 이없는 프로덕션 단계를 디버깅하는 경우 CharlesProxy를 사용하여 "디 버버 줄이 삽입 된 소스 파일의 새 복사본"에 로컬 맵을 수행하여이를 수행 할 수 있습니다.


2
이것은 나를 구했습니다! 내가 무엇을하더라도 디버거 명령을 입력 할 때까지 파일이 표시되지 않았습니다. 그 후 디버거 명령을 제거한 후에도 페이지 재로드 및 디버깅 세션에서 지속되었습니다.
Mike Devenney 2017 년

0

IE에서 이런 종류를 추적하려고 할 때 개발 도구 (F12)를 열고 콘솔에서 다음 줄을 사용하여 중단 점을 배치 할 위치를 찾습니다.

debugger;myFunction();

그러면 myFunction()중단 점 으로 들어가서 설정할 수있는 디버거 탭으로 전환됩니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.