我在我的javascript文件(jaydata.js)中添加了一个断点,并按下“跳到下一个函数调用”。 当它到达一条线:
},
弹出另一个标题为“[VM](8312)”的文件。我一直点击“跳到下一个函数调用”,现在我的屏幕是:
这些奇怪而神秘的剧本名为“[VM](XXXX”以及它们来自哪里?
答案 0 :(得分:94)
[VM] (scriptId)
没有特别的意义。这是一个虚拟名称,可帮助我们区分与文件名无直接关联的代码,例如使用eval
和朋友创建的代码。
过去,所有这些脚本都标有(program)
。
如果您感兴趣,只需look up "[VM]"
in the source code of Chromium,您会发现这些数字在开发者工具之外没有重要意义。
[VM] (scriptId)
已重命名为VMscriptId
a while ago,如果值再次更改,则此处为direct link to search result。
答案 1 :(得分:34)
每当您通过AJAX加载HTML内容,并且该内容包含<script>
标记时,该脚本将使用eval()进行评估,并被Chrome的来源视图识别为以&#39开头的新文件; VM&#39 ;.您始终可以转到“网络”选项卡,查找AJAX请求,并完整地查看HTML响应,包括脚本。
答案 2 :(得分:33)
使用eval时,javascript会被抛入Chrome Debugger虚拟机。要在Chrome调试器源下查看使用eval创建的js,请在js的末尾(感谢Splaktar)设置此属性:
//@ sourceURL=dynamicScript.js
答案 3 :(得分:4)
我发现某些Chrome扩展程序生成了VM - 他们将CSS / JS插入到页面中,Chrome使用VM文件来运行它。
答案 4 :(得分:3)
如果要在chrome中调试以编程方式注入的JS文件,可以使用debugger;
语句,这比查找脚本的位置更快,而且比生成sourceurl的文件更快。
它就像断点一样,无论您在何处使用debugger;
语句,都会自动在Chrome源代码选项卡中查找代码。
请注意,脚本的来源是VMXXX文件。
答案 5 :(得分:0)
当您调试随后卸载的子窗口(iframe)源时,您的源文件也将获得VM前缀和黄色背景。
答案 6 :(得分:0)
我遇到了同样的问题。问题是我的应用程序代码被意外地视为黑盒子。当我尝试进入代码时,它会不断打开这些VMXXXX
标签。
删除我的应用程序的js文件的黑盒设置后,我可以成功单步执行我的代码。
答案 7 :(得分:0)
@sourceURL
使您可以在使用评估时简化开发。
通过在代码中包含以下将被规避的特殊注释,您可以命名评估,内联脚本和样式,以便它们在DevTools中显示为更合逻辑的名称。
//# sourceURL=someName
答案 8 :(得分:0)
为防止这种情况
(function ()
{
var originalEval = eval;
eval =
function (script)
{
return originalEval(script + "\n//# sourceURL=blackbox-this.js");
}
}());
然后将黑盒^.*blackbox-this.js$
与setInterval / setTimeout相同,当它得到一个字符串时(但这仍然是一种不好的做法,对吗?)
对您有用吗?
答案 9 :(得分:-1)
我在调试角度应用程序时遇到了同样的问题。看到太多无法黑盒化的VM脚本真的需要很长时间才能进行调试。 我宁愿选择mozilla / IE explorer进行调试。