我在我的 javascript 文件 (jaydata.js) 中添加了一个断点,并按下了“Step over to the next function call”。当它到达一条线时:
},
弹出另一个标题为“[VM] (8312)”的文件。我一直点击“跳到下一个函数调用”,现在我的屏幕是:
这些名为“[VM](XXXX”的奇怪而神秘的脚本是什么?它们来自哪里?
我在我的 javascript 文件 (jaydata.js) 中添加了一个断点,并按下了“Step over to the next function call”。当它到达一条线时:
},
弹出另一个标题为“[VM] (8312)”的文件。我一直点击“跳到下一个函数调用”,现在我的屏幕是:
这些名为“[VM](XXXX”的奇怪而神秘的脚本是什么?它们来自哪里?
[VM] (scriptId)
没有特别的意义。这是一个虚拟名称,可以帮助我们区分与文件名没有直接关联的代码,例如使用eval
和朋友创建的代码。
过去,所有这些脚本都只是标记为(program)
.
如果你有兴趣,只要看看"[VM]"
Chromium 的源代码,你就会发现这些数字在开发者工具之外没有任何意义。
[VM] (scriptId)
已重命名为VMscriptId
a while ago,这里是搜索结果的直接链接,以防值再次更改。
每当您通过 AJAX 加载 HTML 内容并且该内容包含<script>
标签时,脚本将使用 eval() 进行评估,并被 Chrome 的 Sources 视图识别为以“VM”开头的新文件。您始终可以转到“网络”选项卡,找到 AJAX 请求,并查看整个 HTML 响应,包括您的脚本。
使用 eval 时,javascript 会被扔进 Chrome 调试器 VM。为了在 Chrome Debugger Sources 下查看使用 eval 创建的 js,请在 js 的末尾设置此属性(感谢 Splaktar):
//@ sourceURL=dynamicScript.js
我发现 VM 是从一些 Chrome 扩展生成的——它们将 CSS/JS 插入页面,Chrome 使用 VM 文件来运行它。
当您调试随后卸载的子窗口 (iframe) 源时,您的源文件也将获得 VM 前缀和黄色背景。
我遇到了同样的问题。问题是我的应用程序代码被意外地视为黑盒。当我尝试进入代码时,它不断打开这些VMXXXX
选项卡。
删除应用程序 js 文件的黑盒设置后,我可以成功单步执行我的代码。
当我调试我的角度应用程序时,我遇到了同样的问题。看到太多无法黑盒化的 VM 脚本确实需要很长时间才能调试。我宁愿选择 mozilla/IE explorer 来调试。
为了防止这种情况
(function ()
{
var originalEval = eval;
eval =
function (script)
{
return originalEval(script + "\n//# sourceURL=blackbox-this.js");
}
}());
然后黑盒^.*blackbox-this.js$
setInterval/setTimeout 在获取字符串时也是如此(但这无论如何都是不好的做法,对吧?;))
那对你有用吗?