我在我的javascript文件(jaydata.js)中添加了一个断点,然后按“进入下一个函数调用”。当到达一行时:
},
弹出另一个名为“ [VM](8312)”的文件。我一直单击“转到下一个函数调用”,现在的屏幕是:
这些标题为“ [VM](XXXX“”的奇怪而神秘的脚本是什么,它们是从哪里来的?
我在我的javascript文件(jaydata.js)中添加了一个断点,然后按“进入下一个函数调用”。当到达一行时:
},
弹出另一个名为“ [VM](8312)”的文件。我一直单击“转到下一个函数调用”,现在的屏幕是:
这些标题为“ [VM](XXXX“”的奇怪而神秘的脚本是什么,它们是从哪里来的?
Answers:
[VM] (scriptId)
没有特别的意义。这是一个虚拟名称,可帮助我们区分与文件名不直接相关的代码,例如使用eval
和朋友创建的代码。
过去,所有这些脚本都被标记为(program)
。
如果您有兴趣,只需查看"[VM]"
Chromium的源代码,您会发现这些数字在开发人员工具之外没有重要意义。
[VM] (scriptId)
已重命名为VMscriptId
前一阵子,但我将答案保持在当前状态以免使问题无效。最近于codesearch链接是: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的错误,该追溯包含正确的文件名,但是此后,stacktraces包含VM Magic。这使得不可能从堆栈跟踪中获取文件的源代码(来自同一来源),而且无法缓存它们,因为您不知道将来的堆栈跟踪中哪个文件。此问题已在开发工具中修复,但在webapps中未修复。
使用eval时,JavaScript会扔进Chrome调试器VM。为了查看在Chrome调试器源下使用eval创建的js,请在js的末尾(感谢Splaktar)设置此属性:
//@ sourceURL=dynamicScript.js
Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
如果要在chrome中调试以编程方式注入的JS文件,可以使用该debugger;
语句,这比查找脚本的位置要快,而且比使用sourceurl生成文件要快。
它像断点一样工作,无论您在何处使用该debugger;
语句,都可以在chrome源标签中自动精确定位您的代码。
请注意,脚本的来源是VMXXX文件。
debugger;
声明,他可以揭开神秘的“奇怪的和神秘的脚本,标题为[[VM](XXXX“)”的来源,如果他愿意的话
我遇到了同样的问题。问题是我的应用程序的代码被误认为是黑盒。当我尝试进入代码时,它一直打开这些VMXXXX
选项卡。
删除应用程序js文件的黑盒设置后,我可以成功地逐步执行代码。
在调试我的角度应用程序时,我遇到了同样的问题。看到太多无法被黑盒显示的VM脚本确实需要花费很长时间进行调试。我宁愿选择mozilla / IE资源管理器进行调试。