JavaScriptファイル(jaydata.js)にブレークポイントを追加し、「次の関数呼び出しにステップオーバーする」を押していました。それが次のような行になったとき:
},
「[VM](8312)」というタイトルの別のファイルがポップアップしました。「次の関数呼び出しにステップオーバー」をクリックし続けたところ、画面は次のようになりました。
「[VM](XXXX)」というこれらの奇妙で神秘的なスクリプトは何ですか、またどこから来たのですか?
JavaScriptファイル(jaydata.js)にブレークポイントを追加し、「次の関数呼び出しにステップオーバーする」を押していました。それが次のような行になったとき:
},
「[VM](8312)」というタイトルの別のファイルがポップアップしました。「次の関数呼び出しにステップオーバー」をクリックし続けたところ、画面は次のようになりました。
「[VM](XXXX)」というこれらの奇妙で神秘的なスクリプトは何ですか、またどこから来たのですか?
回答:
[VM] (scriptId)
特別な意味はありません。を使用eval
して作成されたコードなど、ファイル名に直接関連付けられていないコードを区別するのに役立つダミーの名前です。
以前は、これらのスクリプトはすべて単にラベル付けされていました(program)
。
興味がある場合は、Chromiumのソースコードを調べる"[VM]"
だけで、これらの数値が開発者ツール以外では重要な意味を持たないことがわかります。
[VM] (scriptId)
はVMscriptId
しばらく前に名前が変更されました。値が再び変更された場合の検索結果への直接リンクは次のとおりです。
[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までトレースするエラーが発生し、トレースバックには正しいファイル名が含まれますが、その後、スタックトレースにはVMマジックが含まれます。これにより、スタックトレース内のファイルの[同じオリジンから]ソースコードを複数回取得することが不可能になり、将来のスタックトレースでどのファイルがどれであるかわからないため、それらをキャッシュすることはできません。これはDev Toolsでは修正されていますが、webappsでは修正されていません。
evalを使用すると、JavaScriptが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;
ファイルをChromeでデバッグする場合は、ステートメントを使用できます。これは、スクリプトの場所を見つけるよりも速く、sourceurlでファイルを生成するよりも高速です。
これはブレークポイントのように機能し、debugger;
ステートメントを使用する場所であればどこでも、自動的にchromeソースタブのコードを特定します。
スクリプトのソースはVMXXXファイルであることに注意してください。
debugger;
神秘「『[VM](XXXX』と題し、奇妙で不思議なスクリプトは」彼がそう望む場合から来ているところ声明彼が分かりやすく説明することができます。
私も同じ問題に遭遇しました。問題は、私のアプリのコードが誤ってブラックボックスと見なされたことです。コードにステップインしようとしたときに、これらのVMXXXX
タブが開かれ続けました。
アプリのjsファイルのブラックボックス設定を削除した後、コードをステップ実行できました。