Javascript 파일 (jaydata.js)에 중단 점을 추가하고 "다음 함수 호출로 넘어 가기"를 누르고있었습니다. 그것이 줄에 도착했을 때 :
},
"[VM] (8312)"라는 제목의 다른 파일이 팝업되었습니다. "다음 함수 호출로 넘어 가기"를 계속 클릭하면 화면은 다음과 같습니다.
"[VM] (XXXX")라는이 이상하고 신비한 스크립트는 무엇이며 어디에서 왔습니까?
Javascript 파일 (jaydata.js)에 중단 점을 추가하고 "다음 함수 호출로 넘어 가기"를 누르고있었습니다. 그것이 줄에 도착했을 때 :
},
"[VM] (8312)"라는 제목의 다른 파일이 팝업되었습니다. "다음 함수 호출로 넘어 가기"를 계속 클릭하면 화면은 다음과 같습니다.
"[VM] (XXXX")라는이 이상하고 신비한 스크립트는 무엇이며 어디에서 왔습니까?
답변:
[VM] (scriptId)
특별한 의미가 없습니다. 파일 이름에 직접 연결되지 않은 코드 (예 : 코드를 사용하여 만든 코드)를 구별하는 데 도움이되는 더미 이름입니다.eval
및 friends)와 입니다.
과거에는이 모든 스크립트에 라벨이 붙어있었습니다. (program)
.
관심이 있으시면 찾아보십시오."[VM]"
Chromium의 소스 코드를 개발자 도구 외부에서이 숫자가 의미가 없다는 것을 알게 될 것입니다.
[VM] (scriptId)
의 이름 VMscriptId
이 얼마 전에 변경 되었으며 여기 에 값이 다시 변경되는 경우 검색 결과 로 직접 연결되는 링크가 있습니다 .
[VM] (scriptId)
이름이 바뀌 었습니다 VMscriptId
얼마 전에 ,하지만 난 질문을 무효화하지 않는 현재 상태에 대한 답을 유지했습니다. 최신 코드 검색 링크는 다음과 같습니다. cs.chromium.org/%22VM%5C%22%20+%22 (값이 다시 변경되는 경우 검색 결과로 직접 연결되는 링크 : chromium.googlesource.com/chromium/blink/+/… )
AJAX를 통해 HTML 컨텐츠를로드 할 때 해당 컨텐츠에 <script>
태그 가 포함 된 경우 스크립트는 eval ()을 사용하여 평가되며 Chrome의 소스보기에서 'VM'으로 시작하는 새 파일로 인식됩니다. 언제든지 네트워크 탭으로 이동하여 AJAX 요청을 찾은 다음 스크립트를 포함하여 HTML 응답을 전체적으로 볼 수 있습니다.
src=/test.js
하여 test.js로 다시 추적하는 오류가 발생하면 추적에는 올바른 파일 이름이 포함되지만 그 이후에는 스택 추적에 VM 마법이 포함됩니다. 이로 인해 stacktrace의 파일에 대한 소스 코드 [같은 출처에서]를 두 번 이상 얻을 수 없으며 향후 스택 추적에서 어떤 파일인지 알 수 없으므로 캐시 할 수 없습니다. 이것은 Dev Tools에서 수정되었지만 webapps에서는 수정되지 않았습니다.
eval을 사용하면 자바 스크립트가 Chrome 디버거 VM에 전달됩니다. Chrome 디버거 소스에서 eval로 작성된 js를 보려면 js의 끝에 (Splaktar 덕분에)이 속성을 설정하십시오.
//@ sourceURL=dynamicScript.js
WebKit, FireBug 또는 IE8 Developer Tool과 같은 일부 디버거로 동적 로딩 JavaScript를 디버깅 할 수 있습니까?
Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
크롬으로 프로그래밍 방식으로 주입 된 JS 파일을 디버깅하려면 debugger;
명령문을 사용할 수 있습니다. 이는 스크립트가있는 위치를 찾는 것보다 빠르며 sourceurl을 사용 하여 파일을 생성하는 것보다 빠릅니다 .
중단 점처럼 작동하며 debugger;
명령문 을 사용할 때마다 크롬 소스 탭에서 코드를 자동으로 정확하게 찾아냅니다 .
스크립트의 소스는 VMXXX 파일입니다.
debugger;
신비 ' "[VM] (XXXX"라는 제목의 이상하고 신비한 스크립트'그가 그렇게 원한다면에서오고 어디 성명 그는 신비성을 할 수 있습니다.