Chrome Outil de Développement: [VM] fichier à partir de javascript
J'ai ajouté un point d'arrêt dans mon fichier javascript (jaydata.js) et a été en appuyant sur "Étape sur le prochain appel de la fonction."
Quand il a obtenu à une ligne qui a été:
},
un autre fichier intitulé "[VM] (8312)" sauté. J'ai gardé en cliquant sur "Étape sur le prochain appel de la fonction" et maintenant, mon écran est:
Quelles sont ces étranges et mystérieux scripts intitulé "[VM](XXXX " et d'où viennent-ils?
- Ces VM fichiers s'affichent également lorsque vous modifiez les fichiers de débogage dans le même temps. Chrome perd la synchro et lorsqu'un point d'arrêt est mis sur le fichier il s'arrête de code à une autre position dans le fichier en mémoire quelque part. par exemple test.html permettra à un point d'arrêt, mais lorsque google Chrome s'arrête à VM99:test.html à une autre position. La solution est de fermer Chrome renommer les fichiers, par exemple test2.html et recommencer. (Effacement de l'historique, le cache, etc ne fonctionne pas et Chrome garder le chargement de la VM99:test.html si vous essayez de faire cela.
Vous devez vous connecter pour publier un commentaire.
[VM] (scriptId)
a pas de signification particulière. C'est un faux nom pour nous aider à distinguer de code qui ne sont pas directement liées à un nom de fichier, telles que le code créé à l'aide deeval
et amis.Dans le passé, tous ces scripts ont été simplement étiquetés
(program)
.Si vous êtes intéressé, juste rechercher
"[VM]"
dans le code source de Chrome, vous découvrirez que ces chiffres n'ont aucune signification en dehors de l'outils de développement.mise à jour 2015-06-25
[VM] (scriptId)
a été renomméVMscriptId
il y a un moment, et voici le lien direct vers les résultats de recherche dans le cas où la valeur de change de nouveau.[VM] (scriptId)
a été renomméVMscriptId
il y a, mais j'ai gardé la réponse dans son état actuel pour ne pas invalider la question. La dernière codesearch lien est: cs.chromium.org/%22VM%5C%22%20+%22 (lien direct vers les résultats de recherche dans le cas où la valeur change à nouveau: chromium.googlesource.com/chromium/blink/+/...)Chaque fois que vous chargez du contenu HTML par AJAX, et que le contenu contient
<script>
balises, le script sera évaluée à l'aide de la fonction eval() et reconnu par google Chrome, Sources de vue en tant que nouveau fichier commençant par "VM". Vous pouvez toujours aller sur l'onglet Réseau, trouver de la requête AJAX, et d'afficher le code HTML de réponse dans son intégralité, y compris votre script.src=/test.js
alors causer une erreur qui remonte à test.js, le traceback contient le nom de fichier, mais par la suite, stacktraces contenir la VM de la magie. Ce qui rend impossible d'obtenir le code source [d'origine] pour les fichiers dans le stacktrace plus d'une fois, et vous ne pouvez pas mettre en cache, que vous ne savez pas quel fichier est à l'avenir stacktraces. Ceci est corrigé dans les Outils de Dev, mais pas dans les webapps.Lors de l'utilisation de eval, le javascript est lancée dans le Chrome Débogueur de Vm. Afin de visualiser js créé avec eval sous Chrome Débogueur Sources, définissez cet attribut à la fin (merci Splaktar) de la js:
Est possible de déboguer le chargement dynamique de JavaScript par certains débogueur comme WebKit, FireBug ou IE8 Outil de développement?
@
travaille toujours pour moi.document.createElement('script');
Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
J'ai trouvé VM est généré à partir de certaines extensions de Chrome - ils insérez CSS/JS dans la page et google Chrome utilise les fichiers de machines virtuelles pour l'exécuter.
Si vous souhaitez déboguer par programme injecté fichiers JS dans chrome, vous pouvez utiliser le
débogueur;
déclaration, c'est plus rapide que de trouver où votre script et aussi plus rapide que la génération d'un fichier avec sourceurl.Il fonctionne comme un point d'arrêt et automatiquement vous pouvez préciser votre code dans la source de chrome onglet où vous utilisez le
debugger;
déclaration.Noter que la source de ce script est un VMXXX fichier.
Lorsque vous déboguez une fenêtre enfant (iframe) source qui est ensuite déchargé de votre fichier source sera également obtenir la VM préfixe et l'arrière-plan jaune.
Je suis tombé sur le même problème. Le problème est que mon application du code a été considéré comme blackboxes par accident. Quand j'ai essayé de l'étape dans le code, elle a gardé de l'ouverture de ces
VMXXXX
onglets.Après la suppression de la blackbox paramètre pour mon application fichier js, j'ai pu avec succès l'étape par le biais de mon code.
La
@sourceURL
permet de rendre le développement plus facile lorsque l'on travaille avec est évaluée comme.En incluant les éléments suivants spécial des commentaires dans votre code, qui sera evaled, vous pouvez nom est évaluée comme et dans la ligne des scripts et des styles de sorte qu'ils apparaissent comme de plus en plus des noms logiques dans votre DevTools.
Plus d'info ici - https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps#sourceurl_and_displayname
J'ai eu le même problème quand j'étais débogage mon angulaire de l'application. Voir trop grand nombre de VM scripts qui ne pouvait pas être blackboxed étaient vraiment longues à déboguer.
J'ai plutôt choisi mozilla/IE explorer à déboguer.